我正在使用.net来解析XML。下面是需要解析的XML。我需要收集来自Animal的id和来自AnimalName,AnimalPicture和AnimalPicture类型的信息。
<AnimalEntry version="2.0">
<Animal id="1">
<Information>
<Type>
Indoor Pet
<Type>
<AvailableTypes> //always only 1 type
<AvailableType>
<Active>
<AnimalName> Rupert</AnimalName>
<AnimalPictures> //Always only 1 picture
<AnimalPicture type="jpg"> random.jpg <AnimalPicture>
</AnimalPictures>
</Active>
</AvailableType>
</AvailableTypes>
<Price>10000</Price>
</Information>
</Animal>
</AnimalEntry>我可以像下面这样收集id:
XmlDocument xDoc new XmlDocument();
xDoc.Load(xmlUrl);
XmlNode node = xDoc.DocumentElement.ChildNodes[0];
string id = node.Attributes["id"].Value;我对如何处理嵌套节点并不熟悉。有没有推荐的方法来获取嵌套的AnimalName、AnimalPicture和OwnerId?我是否需要调用foreach,或者有没有方法可以直接获取节点?
发布于 2020-06-20 00:23:07
使用linq to xml,您可以尝试这样的操作。如果您详细介绍了这种方法,还可以使用linq how-to-query-linq-to-xml-using-xpath尝试xpath。
XElement element = XElement.Parse("Xml data");
foreach (XElement xe in element.Elements(XName.Get("Animal")))
{
string id = xe.Attribute(XName.Get("id")).Value;
var allChildrens = xe.Descendants();
string animalName = allChildrens.FirstOrDefault(x => x.Name == "AnimalName")?.Value;
string animalPicture = allChildrens.FirstOrDefault(x => x.Name == "AnimalPicture")?.Value;
string animalPictureType = allChildrens.FirstOrDefault(x => x.Name == "AnimalPicture")?.Attribute(XName.Get("type"))?.Value;
}https://stackoverflow.com/questions/62473248
复制相似问题