2013-07-04 34 views
0

我想採用位於當前Property標記xml中的所有Photo標記。在當前層次結構中獲取XML標記

XML

<Properties> 
    <Property> 
     <Photos> 
      <Photo> 
      </Photo> 
     </Photos> 
    </Property> 
    <Property> 
     <Photos> 
      <Photo> 
      </Photo> 
     </Photos> 
    </Property> 
    <Property> 
     <Photos> 
      <Photo> 
      </Photo> 
     </Photos> 
    </Property> 
</Properties> 

代碼

xmlnode = xmldoc.GetElementsByTagName("Property"); 
for (int i = 0; i < xmlnode.Count - 1; i++) 
{ 
    XmlNodeList xmlNode2;        
    xmlNode2 = xmldoc.GetElementsByTagName("Photo"); 

    // I wanna get all the Photo tag that are inside the current Property tag 
    for (int j = 0; j < xmlNode2.Count - 1; j++) 
    { 
     // Get the total of tags called Photo in my XML  
    } 
} 

但在我的代碼,我得到的總Photos標籤的所有XML文件,而不是在當前Property標籤。

我該怎麼做?

回答

1

注意您的代碼將全部選中Property元素與您的代碼相同即可獲得Photo元素。

而不是使用索引,你可以依靠XPath來處理XML文檔,像這樣:

// Starting XPath expression with a slash means: "starting at document element" 
foreach (XmlElement property in xmldoc.SelectNodes("/Properties/Property")) 
{ 
    Console.WriteLine("Property"); 

    // Without a starting slash, you'll use current node context 
    foreach (XmlElement photo in property.SelectNodes("Photos/Photo")) 
    { 
     Console.WriteLine("\tPhoto"); 
    } 
} 

輸出:

Property 
    Photo 
Property 
    Photo 
Property 
    Photo 
+0

我試試你的代碼,但在'返回0 SelectNodes' –

+0

我試着用你的XML示例文件並運行。你確定你使用了相同的XML結構嗎?您可能知道,但XML操作區分大小寫。 –

0
using System.Linq; 
using System.Xml.Linq; 

public void ProcessPhotos() { 
    XDocument xDoc = XDocument.Load("<path to your xml file"); 
    foreach(XElement xProperty in xDoc.Descendants("Property")) { 
     // goes through all Property xml elements 
     foreach(XElement xPhoto in xProperty.Descendants("Photo")) { 
      // and process all photos in current Property element 
     } 
    } 
}