我有一个XML字符串,其格式不像:
<SomeTag><Tag>tag 1</Tag><Tag>tag 2</Tag><Tag>tag 3</Tag><Tag>tag 4</Tag></SomeTag>
当我运行此代码时:
using (XmlReader reader = XmlReader.Create(stream))
{
reader.MoveToContent();
while (reader.Read())
{
if ((reader.NodeType == XmlNodeType.Element) && (string.Compare(reader.Name, name, StringComparison.InvariantCultureIgnoreCase) == 0))
{
var element = (XElement)XNode.ReadFrom(reader);
yield return element;
}
}
reader.Close();
}
它只识别节点的标签1和标签3为元素,并将标签2和标签4识别为TextNodes。
为什么?
我该怎么做才能修复它?
仅供参考,如果我在每个标记之后使用换行符添加格式,它会按预期工作,将所有标记识别为元素。但是,我无法控制提供给我的XML。
答案 0 :(得分:3)
我怀疑问题是XNode.ReadFrom
已经将读者定位在“下一个元素的开头” - 然后你正在调用Read
,它正在移动在元素上和下一个节点上。
这只是一个猜测 - 这是XmlReader
使得棘手的事情:(尝试以Read
调用条件取决于您是否刚刚调用ReadFrom
。这样的事情:
using (XmlReader reader = XmlReader.Create(stream))
{
reader.MoveToContent();
while (!reader.EOF)
{
if (reader.NodeType == XmlNodeType.Element &&
reader.Name.Equals(name, StringComparison.InvariantCultureIgnoreCase))
{
var element = (XElement)XNode.ReadFrom(reader);
yield return element;
}
else
{
reader.Read();
}
}
}