【发布时间】:2014-01-17 11:53:07
【问题描述】:
我有一个可以单行的 XML 文件:
<webshop><item></item><item></item></webshop>
或多行:
<webshop>
<item>
</item>
<item>
</item>
</webshop>
或混合:
<webshop>
<item></item>
<item></item>
</webshop>
每个标签还有一个简短的变体,如<webshop/> 和<item/>,其中标签在一对 括号中打开和关闭。
每个标签可以出现任意次数,但<item></item> 或<item/> 标签只会出现在<webshop> ... </webshop> 内。此外,整个 xml 标签层次结构比这两个标签要大得多(但我对这个问题保持简单),每个标签都可以有属性。
我正在尝试使用 c# 中的 xmlreader 解析这样的 xmlfile,但我总是遇到问题。
如果我尝试:
while(reader.ReadToFollowing("webshop"))
{
Console.WriteLine("webshop");
//get attributes of webshop tag and do something...
while(reader.ReadToFollowing("item"))
{
Console.WriteLine("Item");
//get attributes of item tag and do something...
}
}
当 xml 为单行、混合或标签自行关闭时(<item/> 而不是<item></item>),我永远不会获得所有数据。大多数时候,读者只是在<webshop> 或<item> 的一个实例之后停下来
是否有一种强大的方法来解析这个 xml,即使事先不知道确切的衬里?我想遍历所有网店,并为每个网店循环所有商品,然后对这些数据做一些事情。
【问题讨论】:
-
您在滥用 XmlReader。使用 LINQ to XML;它远更易于使用。
-
究竟是什么被滥用了?您能否提供有关“使用 Linq to XML”的更多详细信息?有教程或参考吗?
-
我想也许他的意思是你在“使用”
XmlReader,这与误用非常相似。请改用 LINQ to XML。 -
XmlReader 将用于大型文档,我认为没有理由在这里使用它。 LinqToXml 是一个简单的 google,XmlDocument 类也可以处理这个问题。你需要把你的 xml 放在头上,多行是文本文档。
标签: c# xml xml-parsing