XML如何使用XPath选择子元素

时间:2012-02-03 12:45:29

标签: c# asp.net xml xpath nodes

我有以下XML,如下图所示:

XML File

但我不能为我的生活,获取任何代码来选择<ArrayOfHouse>之间的house元素。

一旦我设法选择一个House元素,就会有多个// Parse the data as an XML document XDocument xmlHouseResults = XDocument.Parse(houseSearchResult); // Select the House elements XPathNavigator houseNavigator = xmlHouseResults.CreateNavigator(); XPathNodeIterator nodeIter = houseNavigator.Select("/ArrayOfHouse/House"); // Loop through the selected nodes while (nodeIter.MoveNext()) { // Show the House id, as taken from the XML document MessageBox.Show(nodeIter.Current.SelectSingleNode("house_id").ToString()); } 元素,到目前为止这是我的代码:

{{1}}

我正在获取XML流,因为我已设法在上面显示的MessageBox中显示数据,但我无法访问各个房屋。

2 个答案:

答案 0 :(得分:1)

您可以像这样选择House节点:

var houses = XDocument.Parse(houseSearchResult).Descendants("House");
foreach(var house in houses)
{
    var id = house.Element("house_id");
    var location = house.Element("location");
}

或者您可以使用Select直接获取强类型对象:

var houses = XDocument.Parse(houseSearchResult)
                      .Descendants("House")
                      .Select(x => new House
                                   {
                                       Id = x.Element("house_id"),
                                       Location = x.Element("location")
                                   });

这假定存在具有属性HouseId的类Location

另外,请务必考虑Thomas Levesque关于使用XML序列化的建议。

答案 1 :(得分:0)

使用XPath,您需要使用XmlNamespaceManager,但是如果您有XDocument,则只需使用LINQ to XML轴方法即可。

XNamespace df = XmlHouseResults.Root.Name.Namespace;

foreach (XElement house in XmlHouseResults.Descendants("df" + "House"))
{
  MessageBox.Show((string)house.Element("df" + "house_id"));
}