从XML文档中获取指定节点的值

27

我有一个问题,需要使用C#遍历XML文档并获取所有必要的值。我成功地遍历了XML文档中所有指定的XmlNodeList,并成功地获取了其中所有XmlNode的值,但是我还需要获取一些不在这个XmlNodeList之内的值。

例如:

<?xml version="1.0" encoding="UTF-8" ?>
<Element xsi:schemaLocation="http://localhost/AML/CaseInvestigationMangement/Moduli/XmlImportControls/xsdBorrow.xsd xsd2009027_kor21.xsd" Kod="370" xmlns="http://localhost/AML/CaseInvestigationMangement/Moduli/XmlImportControls/xsdBorrow.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
/2001/XMLSchema-instance">
    <ANode>
        <BNode>
            <CNode>
                <Example>
                    <Name>John</Name>
                    <NO>001</NO>
                </Example>
            </CNode>
        </BNode>
        <ID>1234</ID>
        <Date>2011-10-01</Date>
    </ANode>
    <ANode>
        <BNode>
            <CNode>
                <Example>
                    <Name>Mike</Name>
                    <NO>002</NO>
                </Example>
            </CNode>
        </BNode>
        <ID>5678</ID>
        <Date>2011-03-31</Date>
    </ANode>
</Element>

这是获取XML文档中每个找到的ANode节点中Name和NO值的代码:

XmlDocument xml = new XmlDocument();
xml.LoadXml(myXmlString); //myXmlString is the xml file in string //copying xml to string: string myXmlString = xmldoc.OuterXml.ToString();
XmlNodeList xnList = xml.SelectNodes("/Element[@*]/ANode/BNode/CNode");
foreach (XmlNode xn in xnList)
{
  XmlNode example = xn.SelectSingleNode("Example");
    if (example != null)
    {
        string na = example["Name"].InnerText;
        string no = example["NO"].InnerText;
    }
}

现在我遇到一个问题,无法获取ID和日期的值。

1个回答

31

就像你从 CNode 获取东西一样,你也需要从 ANode 获取东西。

XmlNodeList xnList = xml.SelectNodes("/Element[@*]");
foreach (XmlNode xn in xnList)
{
  XmlNode anode = xn.SelectSingleNode("ANode");
    if (anode!= null)
    {
        string id = anode["ID"].InnerText;
        string date = anode["Date"].InnerText;
        XmlNodeList CNodes = xn.SelectNodes("ANode/BNode/CNode");
        foreach (XmlNode node in CNodes)
        {
         XmlNode example = node.SelectSingleNode("Example");
         if (example != null)
         {
            string na = example["Name"].InnerText;
            string no = example["NO"].InnerText;
         }
        }
    }
}

我尝试了这个,但是我没有得到任何值。 "anode" 是空的,在行 "if (anode!= null)" 中跳过了。 - Mega
还尝试从第一行中移除ANode。第一行应该是 XmlNodeList xnList = xml.SelectNodes("/Element[@*]");。在这种情况下,我得到了iddate的值,但是在foreach (XmlNode node in CNodes)这一行遇到了问题。 - Mega
循环仅在CNode中。我尝试在if (example != null)中使用Console.WriteLine(id + " " + date + " " + na + " " + no);,并得到了以下结果:1234 2011-10-01 John 0011234 2011-10-01 Mike 002 - Mega

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