【问题标题】:Need to parse a xml string需要解析一个xml字符串
【发布时间】:2010-09-27 04:12:50
【问题描述】:

我需要解析一个 xml 字符串(.NET,C#),不幸的是,它的格式不正确。我返回的 xml 流是

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

我尝试过使用 xml 阅读器,但它崩溃了,因为它认为,而且理所当然地,当它试图解析时有 2 个节点元素

有什么我可以用这个做的吗?我无法更改 XML,因为我无法控制将 XML 发回的代码..

任何帮助,将不胜感激。

感谢和问候

加根·扬胡亚

【问题讨论】:

    标签: c# .net xml xsd


    【解决方案1】:

    我认为您可以在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);
        }
    

    【讨论】:

    • 这会比我提出的答案更容易。
    【解决方案2】:

    您得到的是格式良好的 XML 片段,但正如您所指出的,不是格式良好的 XML 文档。可以吗

    • 在返回的元素周围包裹一个顶级元素?或
    • 从外壳 XML 文档中将返回的 XML 片段作为外部实体引用,并将外壳文档传递给 XML 阅读器?

    【讨论】:

    • 是的,我做到了@ larsH ..我必须围绕retuened元素包装一个顶级参数..这个想法一直存在......但你不认为,如果我这样做并阅读后面的字符串会增加开销吗?因为我必须在生产中编写代码,所以我必须这样做,即使我认为这可能不是一个优雅的解决方案.. 你说????
    • @user412628:是的,它会增加一点开销。如果您在 .NET 中解析 XML,我认为按照@Michael 的建议使用 XmlParserContext 会更优雅。
    猜你喜欢
    • 1970-01-01
    • 2011-04-23
    • 1970-01-01
    • 1970-01-01
    • 2018-03-24
    • 2013-08-31
    • 1970-01-01
    • 2016-04-25
    • 1970-01-01
    相关资源
    最近更新 更多