需要解析一个XML字符串。

4

我需要解析一个不规范的XML字符串(.NET, C#),恐怕这个XML流并不完整。我接收到的XML流如下:

<fOpen>true</fOpen>
<ixBugParent>0</ixBugParent>
<sLatestTextSummary></sLatestTextSummary>
<sProject>Vantive</sProject>
<ixArea>9</ixArea>

我尝试使用XML读取器,但它崩溃了,因为每次解析时它认为有2个节点元素,这是正确的。我能做些什么?我不能更改XML,因为我无法控制发送XML的代码...任何帮助都将不胜感激。谢谢和问候,Gagan Janjua。
2个回答

7

我认为你可以在XmlTextReader的某个重载方法中使用XmlParserContext指定节点类型为XmlNodeType.Element,类似于MSDN上的这个示例 (http://msdn.microsoft.com/en-us/library/cakk7ha0.aspx):

XmlTextReader tr = new XmlTextReader("<element1> abc </element1> 
  <element2> qrt </element2>
  <?pi asldfjsd ?>
  <!-- comment -->", XmlNodeType.Element, null);

while(tr.Read()) {
    Console.WriteLine("NodeType: {0} NodeName: {1}", tr.NodeType, tr.Name);
    }

这比我提出的答案更容易。 - LarsH

0
你得到的是一个格式良好的XML片段,但正如你所指出的那样,并不是一个格式良好的XML文档。你可以:
  • 在返回的元素周围包装一个顶级元素吗?或者
  • 将返回的XML片段作为外部实体引用到一个外壳XML文档中,并将该外壳文档传递给XML读取器?

1
是的,我在 @ larsH 那里做了那个...我不得不在返回的元素周围包装一个顶级参数..这个想法一直在那里...但你不认为,如果我这样做并读回字符串,它会增加开销吗?由于我必须在生产中编写代码,所以即使我认为这可能不是一个优雅的解决方案,我也不得不这样做..你怎么看? - Gagan
@user412628:是的,它会增加一些开销。如果你在.NET中解析XML,我认为使用XmlParserContext会更优雅,就像@Michael建议的那样。 - LarsH

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接