2011-06-22 45 views
20

我有一个遇到XML文档(使用C#)的问题并获取所有必需的值。我成功地遍历了XML文档中的所有指定的XmlNodeLists,成功获取了所有的XmlNode值,但是我必须在这个XmlNodeList之外获得一些值。从XML文档获取指定的节点值

例如:

<?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> 

这是得到的节点名称值的代码和NO在每一个XML文档中发现的阳极:

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和日期。

回答

24

就像你从得到的东西做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; 
     } 
     } 
    } 
} 
+0

我尝试这样做,但我没有得到任何价值。 “阳极”为空,并跳到一行:“if(阳极!=空)”。 –

+0

也尝试从第一行删除**阳极**。第一行应该是'XmlNodeList xnList = xml.SelectNodes(“/ Element [@ *]”);'。在这种情况下,我得到了** id **和** date **的值,但是我在foreach(CNodes中的XmlNode节点)行中得到了跳转。 –

+0

立即尝试。编辑的版本应该可以工作。 – msarchet