我需要阅读Child Nodes
标记的所有<Imovel>
,问题是我的XML文件中有超过1个({1}}个标记,以及它之间的区别每个<Imovel>
标记都是一个名为ID的属性。
这是一个例子
<Imovel>
我需要阅读每个<Imoveis>
<Imovel id="555">
<DateImovel>2012-01-01 00:00:00.000</DateImovel>
<Pictures>
<Picture>
<Path>hhhhh</Path>
</Picture>
</Pictures>
// Here comes a lot of another tags
</Imovel>
<Imovel id="777">
<DateImovel>2012-01-01 00:00:00.000</DateImovel>
<Pictures>
<Picture>
<Path>tttt</Path>
</Picture>
</Pictures>
// Here comes a lot of another tags
</Imovel>
</Imoveis>
标记的所有标记,并且在我在<Imovel>
标记中进行的每次验证结束时,我需要进行另一次验证。
所以,我认为我需要做2(2)<Imovel>
或foreach
和for
,我对foreach
不太了解,但请关注我的样本
LINQ
但效果不好,在我的XmlReader rdr = XmlReader.Create(file);
XDocument doc2 = XDocument.Load(rdr);
ValidaCampos valida = new ValidaCampos();
//// Here I Count the number of `<Imovel>` tags exist in my XML File
for (int i = 1; i <= doc2.Root.Descendants().Where(x => x.Name == "Imovel").Count(); i++)
{
//// Get the ID attribute that exist in my `<Imovel>` tag
id = doc2.Root.Descendants().ElementAt(0).Attribute("id").Value;
foreach (var element in doc2.Root.Descendants().Where(x => x.Parent.Attribute("id").Value == id))
{
String name = element.Name.LocalName;
String value = element.Value;
}
}
语句中,因为我的foreach
标记,其父标记没有ID属性。
有人可以帮我做这个方法吗?
答案 0 :(得分:8)
你应该能够用两个foreach语句来做到这一点:
foreach(var imovel in doc2.Root.Descendants("Imovel"))
{
//Do something with the Imovel node
foreach(var children in imovel.Descendants())
{
//Do something with the child nodes of Imovel.
}
}
答案 1 :(得分:1)
试试这个。 System.Xml.XPath将xpath选择器添加到XElement。使用xpath查找元素更快更简单。
您不需要XmlReader&amp; XDocument加载文件。
XElement root = XElement.Load("test.xml");
foreach (XElement imovel in root.XPathSelectElements("//Imovel"))
{
foreach (var children in imovel.Descendants())
{
String name = children.Name.LocalName;
String value = children.Value;
Console.WriteLine("Name:{0}, Value:{1}", name, value);
}
//use relative xpath to find a child element
XElement picturePath = imovel.XPathSelectElement(".//Pictures/Picture/Path");
Console.WriteLine("Picture Path:{0}", picturePath.Value);
}
请包括
System.Xml.XPath;