我有以下XML,如下图所示:
但我不能为我的生活,获取任何代码来选择<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中显示数据,但我无法访问各个房屋。
答案 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")
});
这假定存在具有属性House
和Id
的类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"));
}