簡體   English   中英

使用XmlDocument循環遍歷XML

[英]Loop through XML with XmlDocument

我是使用LinqXMLDocument新手。

我有一個簡單的XML文件,我想遍歷所有元素並打印標簽和值。 循環時我不想使用XML標記。 這就是我到目前為止所擁有的。

XML文件:

<?xml version="1.0" encoding="UTF-8"?>
<Step1>One
<Step2>Two
    <Step3>Three
        <Step4>Four
        </Step4>
    </Step3>
</Step2>
</Step1>    

C#代碼

  private void StartIt()
    {
        System.Xml.XmlDocument xd = new System.Xml.XmlDocument();
        xd.Load(@"C:\Projects\GetXML\testLayers.xml");

        XmlNodeList nl = xd.SelectNodes("Layer1");

        foreach (XmlNode xnode in nl)
        {
            Console.WriteLine(xnode.Name + " = " + xnode.InnerText); // + " " +   xnode.InnerXml);
        }
    }

結果:

 Step1 = One
Two
    Three
        Four

我想要的是:

Step1 = One
Step2 = Two
Step3 = Three
Step4 = Four

有什么建議么?

在Linq的幫助下,

XmlDocument doc = new XmlDocument();
doc.Load(fname);

var nodes = doc.SelectNodes("//*[text()]")
    .Cast<XmlNode>()
    .Select(n => new { 
                    Name= n.Name, 
                    Value = n.SelectSingleNode("text()").Value
                })
    .ToList();
// System.Xml.XmlDocument version
XmlDocument xd = new XmlDocument();
xd.Load(@"C:\Projects\GetXML\testLayers.xml");
foreach (XmlElement step in xd.SelectNodes("//*"))
{
    Console.WriteLine("{0} = {1}", step.Name,
       step.SelectSingleNode("text()").Value);
}

// System.Xml.Linq.XDocument version
XDocument xdLinq = XDocument.Load(@"C:\Projects\GetXML\testLayers.xml");
foreach (XElement step in xdLinq.XPathSelectElements("//*"))
{
    Console.WriteLine("{0} = {1}", step.Name, 
       step.Nodes().Where(n => n.NodeType == XmlNodeType.Text).FirstOrDefault());
}

您可以使用LINQ to XMLXDocument類執行相同的操作:

var xDoc = XDocument.Load("Input.txt");

foreach (var e in xDoc.Descendants())
{
    Console.WriteLine("{0} = {1}", e.Name, e.Nodes().OfType<XText>().First().Value.Trim());
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM