Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在C中从XML加载TreeView和XML控件#_C#_Xml_Xslt_Treeview - Fatal编程技术网

C# 在C中从XML加载TreeView和XML控件#

C# 在C中从XML加载TreeView和XML控件#,c#,xml,xslt,treeview,C#,Xml,Xslt,Treeview,我以前从未使用过XML和TreeView或XML控件,在一些在线教程之后,我拼凑了一个工作的TreeView和XML控件,但我有几个问题:1)TreeView除了显示文本外,还显示节点的实际名称,2)当我希望一次只显示一个页面时,XML控件一次显示所有页面,3)如何配置TreeView以使XML控件更改页面 XML控件的XSLT样式表: <?xml version="1.0" encoding="utf-8"?> <xsl:stylesheet version="1.0" xm

我以前从未使用过XML和TreeView或XML控件,在一些在线教程之后,我拼凑了一个工作的TreeView和XML控件,但我有几个问题:1)TreeView除了显示文本外,还显示节点的实际名称,2)当我希望一次只显示一个页面时,XML控件一次显示所有页面,3)如何配置TreeView以使XML控件更改页面

XML控件的XSLT样式表:

<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    xmlns:msxsl="urn:schemas-microsoft-com:xslt" exclude-result-prefixes="msxsl" >
    <xsl:output method="xml" indent="yes"/>
    <xsl:template match="@* | node()">
        <xsl:copy>
            <xsl:apply-templates select="@* | node()"/>
        </xsl:copy>
    </xsl:template>


  <xsl:template match="/">
    <book>
      <xsl:for-each select="book/page">
        <div class="content">
          <div class="nav">
            <a class="prev" id="prev">Previous Page</a>
            <span class="sep">|</span>
            <div class="title" id="divTitle">
              <xsl:value-of select="title" />
            </div>
            <span class="sep2">|</span>
            <a class="next" id="next">Next Page</a>
          </div>
          <div class="main">
            <xsl:value-of select="content"/>
          </div>
          <div id="thisPage" class="page">
            <xsl:value-of select="pgno" />
          </div>
        </div>
      </xsl:for-each>
    </book>
  </xsl:template>
</xsl:stylesheet>
XML控件

   Previous Page             TITLE             Next Page

                            CONTENT

                                                  Page No 

解决方案更新:因为一些额外的问题迫使我如何实现改变目标,问题2和3不再需要解决。但是,我将以下答案标记为正确答案,因为它确实为我解决了问题1

XDocument是XML Linq,而XmlDocument是标准XML

请尝试下面的代码

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml;
using System.Xml.Linq;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            string input =
            "<book time=\"\" title=\"\">" +
              "<page time=\"\">" +
                "<title></title>" +
                "<content>" +

                "</content>" +
                "<pgno></pgno>" +
              "</page>" +
            "</book>";


            XDocument doc = XDocument.Parse(input);
            // or from a file
            //XDocument doc = XDocument.Load(filename);

            XElement title = doc.Descendants("title").FirstOrDefault();
        }

    }
}
​
使用系统;
使用System.Collections.Generic;
使用System.Linq;
使用系统文本;
使用System.Xml;
使用System.Xml.Linq;
命名空间控制台应用程序1
{
班级计划
{
静态void Main(字符串[]参数)
{
字符串输入=
"" +
"" +
"" +
"" +
"" +
"" +
"" +
"";
XDocument doc=XDocument.Parse(输入);
//或者从一个文件
//XDocument doc=XDocument.Load(文件名);
XElement title=doc.substands(“title”).FirstOrDefault();
}
}
}
​

请参见以下网页。我以前使用过AddNode方法几次,效果非常好。您的add节点不同。@jdweng我使用的AddNode方法来自这里的一篇Microsoft支持文章。您能说出使用XmlNode和传入XElement之间的区别吗?如何将XElement传递给AddNode方法?Microsoft文章来自Visual Studio 5(2005),它使用了与最新的网络库不同的库。新的网络库是与VS2008(NET3.0)一起发布的。库已更改,旧库代码不能保证与最新的VS编译器一起使用。
XmlDocument doc = new XmlDocument();
doc.Load(myXml);

tvBook.Nodes.Clear();

XmlNodeList nodelist =  doc.SelectNodes("book/page/title");
XmlDocument cDoc = new XmlDocument();
cDoc.LoadXml("<title></title>");
foreach (XmlNode node in nodelist)
{
    XmlNode newElem = cDoc.CreateNode(XmlNodeType.Element, node.Name, node.LocalName);
    newElem.InnerText = node.InnerText;
    cDoc.DocumentElement.AppendChild(newElem);
}

tvBook.Nodes.Add(new TreeNode(cDoc.DocumentElement.Name));
TreeNode tNode = new TreeNode();
tNode = tvBook.Nodes[0];

AddNode(cDoc.DocumentElement, tNode);
tvBook.ExpandAll();

xmlContent.DocumentSource = myXml;
xmlContent.TransformSource = myStyle;
private void AddNode(XmlNode inXmlNode, TreeNode inTreeNode)
{
    XmlNode xNode;
    TreeNode tNode;
    XmlNodeList nodeList;
    int i;

    if (inXmlNode.HasChildNodes)
    {
        nodeList = inXmlNode.ChildNodes;
        for (i = 0; i < nodeList.Count; i++)
        {
            xNode = nodeList.Item(i);
            inTreeNode.ChildNodes.Add(new TreeNode(xNode.Name));
            tNode = inTreeNode.ChildNodes[i];
            AddNode(xNode, tNode);
        }
    }
    else
    {
        inTreeNode.Text = (inXmlNode.OuterXml).Trim();
    }
}
title
    title
         First Page of My Book
    title
         Second Page of My Book
   Previous Page             TITLE             Next Page

                            CONTENT

                                                  Page No 
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml;
using System.Xml.Linq;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            string input =
            "<book time=\"\" title=\"\">" +
              "<page time=\"\">" +
                "<title></title>" +
                "<content>" +

                "</content>" +
                "<pgno></pgno>" +
              "</page>" +
            "</book>";


            XDocument doc = XDocument.Parse(input);
            // or from a file
            //XDocument doc = XDocument.Load(filename);

            XElement title = doc.Descendants("title").FirstOrDefault();
        }

    }
}
​