2013-07-04 33 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 
     } 
    } 
}