如何从XMLNodeList中打印节点

3

我是一名新手C#编程学习者。我正在尝试解析一个XML文档并将值打印到控制台上。尽管我的程序没有错误,但我没有得到期望的结果。

以下是代码:

XmlDocument doc = new XmlDocument();
doc.Load("C:\\Users\\hsyed\\Documents\\XMLParser\\Example.xml");
XmlNamespaceManager nsmgr = new XmlNamespaceManager(doc.NameTable);
nsmgr.AddNamespace("ab", "Identifier");
XmlNodeList node = doc.SelectNodes("//root/ab:Identity/Refrences/Reference/Value/text()", nsmgr);

String s= node.ToString();
System.Console.WriteLine(s);

Console.Read();

XML文件

    <Attributes>

        <Attribute Name="StudentFirstName" Tag="B"/>

    </Attributes>
</Metadata>
<Identities>
<Identity Identifier="00002C8DGPDDTZ5D" CDate="2013-02-07">
    <References>
        <Reference>
            <Value>A^S2513.268898|B^JOHN</Value>
            <Traces/>
        </Reference>
        <Reference>
            <Value>A^S2613.269022|B^JOHN</Value>
            <Traces/>
        </Reference>
    </References>
</Identity>
<Identity Identifier="000388MRUO7TRSBH" CDate="2013-02-07">
    <References>
        <Reference>
            <Value>A^S2513.285402|B^Doe</Value>
            <Traces/>
        </Reference>
        <Reference>
            <Value>A^S2613.285476|B^Doe</Value>
            <Traces/>
        </Reference>
    </References>
</Identity>

我希望获取“Value”字段中的信息。

谢谢。


我看不到整个xml,但是你的xpath似乎有误。你写成了"//root/ab:Identity/Refrences/Reference/Value/text()",而应该是"//root/Identity/Refrences/Reference/Value/text()"。一旦你得到正确的列表,你需要遍历列表并打印出来。 - Osa E
你是指像这样的东西吗? XmlDocument doc = new XmlDocument(); doc.Load("C:\Users\hsyed\Documents\XMLParser\Example.xml"); XmlNodeList node = doc.SelectNodes("//root/Identities/Identity/Refrences/Reference/Value/text()"); for(int i=0; i<2;i++) { System.Console.WriteLine(node.ToString); } - Huzaifa
2个回答

4

使用您的示例:

XmlDocument doc = new XmlDocument(); 
doc.Load("C:\\Users\\hsyed\\Documents\\XMLParser\\Example.xml");

XmlNodeList nodes = doc.SelectNodes("//root/Identities/Identity/Refrences/Reference/Value/text()");

foreach (XmlNode xn in nodes)
{
    Console.WriteLine(xn.Value.ToString());
}

在C#中真的没有<any collection>.ToString()的覆盖,类似于Java中的AbstractCollection.toString()吗? - Gerold Broser

3

以下是一种基于LINQ的替代方法:

XmlDocument doc = new XmlDocument(); 
doc.Load("whatever path to xml");

var nodes = doc
    .SelectNodes("xpath query goes here")
    .Cast<XmlNode>()
    // optionally, convert to a list
    .ToList();

// Outputs something like: 
//   System.Collection.Generic.List`1[[System.Xml.XmlNode, ...]]
Console.WriteLine(nodes.GetType().FullName);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接