【发布时间】:2012-06-05 02:48:07
【问题描述】:
我有一个这样的 xml 文档:
<Menu>
<Category name="Comida Rapida">
<Food cocina="si">
<Name>Haburguesa</Name>
<Price>10</Price>
</Food>
<Food>
<Name>Papas Fritas</Name>
<Price>20</Price>
</Food>
</Category>
<Category name="Bebidas">
<Food>
<Name>Pepsi</Name>
<Price>30</Price>
</Food>
<Food cocina="si">
<Name>Coca Cola</Name>
<Price>40</Price>
</Food>
</Category>
</Menu>
我要做的是遍历每个<Category> 检查属性是否是我需要的,例如“Bebidas”,所以我感兴趣的部分是:
<Food>
<Name>Pepsi</Name>
<Price>30</Price>
</Food>
<Food cocina="si">
<Name>Coca Cola</Name>
<Price>40</Price>
</Food>
现在我有了这个,我想做一些类似于我已经做过的事情:
首先我要全部打印出来:
Pepsi 30
Coca Cola 40
我只想打印出 food 具有 cocina="si" 属性的那些,所以:
Coca Cola 40
所以我有各种各样的问题:
首先要使用哪种方法,我对大量可能的方法和实现感到困惑:XmlDocument、XmlReader、XmlTextReader 等。
来自this question,我认为 XmlDocument 更易于使用,那就太好了,越简单越好,因为我对解析 Xml 文件还很陌生,你可以理解。
现在到了实际的实现,我尝试了各种各样的事情,但没有多少成功,我似乎可以做一些部分,但不能一起做。
XmlNodeList elemList = doc.GetElementsByTagName("Category");
for (int i = 0; i < elemList.Count; i++)
{
Console.WriteLine(elemList[i].InnerXml);
}
这将输出:
<Food><Name>Haburguesa</Name><Price>10</Price></Food><Food><Name>Papas Fritas</Name><Price>20</Price></Food>
<Food><Name>Pepsi</Name><Price>30</Price></Food><Food><Name>Coca Cola</Name><Price>40</Price></Food>
这很有意义,但现在,我如何检查该类别是否具有属性 name="cocina"?
我猜这样的事情会有所帮助:
for (int j = 0; j < elemList[i].Attributes.Count; j++)
{
//??
}
但我在 XmlTextReader 中找不到类似 MoveToAttribute() 的内容。
还有,我如何检查是否有属性cocina="si"?
【问题讨论】:
标签: c# xml parsing xmldocument xmltextreader