2015-05-08 124 views
0

節點我有這樣的XML:檢索XML屬於特定節點

<ITEM> 
    <RACES> 
    <TAB> 
     <NUMBER>1</NUMBER> 
     <A></A> 
     <B></B> 
    </TAB> 
    <TAB> 
     <NUMBER>2</NUMBER> 
     <A></A> 
     <B></B> 
    </TAB> 
    </RACES> 
</ITEM> 

,纔有可能獲取的XmlNodeList中一切只屬於TAB序號爲1的作爲和燒烤節點?

我使用下面的代碼,但它給了我當然2個節點。我想只有1個節點:

XmlNodeList xnList = xml.SelectNodes("/ITEM/RACES/TAB/A"); 
+2

是的,這是可能的。請將此答案標記爲已接受。附註 - 我會使用Linq XML 0 –

+1

@SergeyBerezovskiy我希望我可以標記該評論,因爲它很搞笑。 – Greg

+0

@AndreasNiedermair我使用XmlNodeList xnList = xml.SelectNodes(「/ ITEM/RACES/TAB/A」),但它給了我當然2個節點。我只需要1個節點 – lugeno

回答

1

你可以做xmlDocument.SelectNodes(表達)

如果您需要兩個節點A & B

expression = @"//TAB[NUMBER=1]/A|//TAB[NUMBER=1]/B" 

,如果你只需要一個節點seperately

expression = @"//TAB[NUMBER=1]/A" 

如果需要僅有B節點seperately

expression = @"//TAB[NUMBER=1]/B" 
0

嘗試如下:

XmlNodeList xnList = xml.SelectNodes("/RACES/TAB"); 
foreach (XmlNode xn in xnList) 
{ 
    int num = xn["NUMBER"].InnerText; 
    if(num==1) 
    { 
    Console.WriteLine("Nodes: {0} {1}", xn["A"], xn["B"]); 
    } 
} 
0

我強烈推薦的LINQ to XML。你可以敲出來的一個聲明:

var nodes_A_and_B = XDocument.Parse(xml) 
        .Descendants("TAB") 
        .Where(t => t.Element("NUMBER").Value == "1") 
        .Select(t => new 
          { 
           A = t.Element("A"), 
           B = t.Element("B") 
          }); 
0

它會回報你需要什麼

快樂編碼

var items = XElement.Parse(xmlelemet) 
         .Elements("RACES") 
         .Elements("TAB") 
         .Where(n => n.Attribute("NUMBER").Value == 1) 
         .Elements();