【问题标题】:Parsing string xml c#解析字符串xml c#
【发布时间】:2016-04-13 10:25:25
【问题描述】:

我有一个从 stream.readtoend() 返回的字符串 XML。

    <VOUCHER>
        <REFERENCE TYPE="String">100</REFERENCE>
        <VNUMBER>568</VNUMBER>
 <UDF:VATDEALERNATURE.LIST DESC="`VATDealerNature`" ISLIST="YES" TYPE="String" INDEX="10031">
      <UDF:VATDEALERNATURE DESC="`VATDealerNature`">Registered Dealer</UDF:VATDEALERNATURE>
     </UDF:VATDEALERNATURE.LIST>
    </VOUCHER>  
    <VOUCHER>
        <REFERENCE TYPE="String">100</REFERENCE>
        <VNUMBER>2</VNUMBER>
 <UDF:VATDEALERNATURE.LIST DESC="`VATDealerNature`" ISLIST="YES" TYPE="String" INDEX="10031">
      <UDF:VATDEALERNATURE DESC="`VATDealerNature`">Registered Dealer</UDF:VATDEALERNATURE>
     </UDF:VATDEALERNATURE.LIST>
    </VOUCHER> 

我需要从字符串 XML 中提取 VNUMBER 的值。此字符串无法加载到 XMLDocument 中。任何选项请告诉我们。

它有 2 个VNUMBER 节点。我需要得到值 568 和 2。

当我加载到 XMLDOcument 时,我收到错误 'UDF' is an undeclared prefix。

谢谢,

【问题讨论】:

  • 你试过什么?什么没有奏效?我们在这里不为您工作,只是帮助解决问题
  • 我试过 XMLDocument 和 XDOCuemt 和 Streamreader
  • 发布示例代码和您遇到的问题
  • 投了反对票,因为 (1) 您发布了 XML 的摘录,因此无法知道节点的路径是什么 (2) XML 看起来像一个示例,而不是复制/粘贴因为它带有星号以引起读者的注意(3)您说字符串不会加载到 XmlDocument 中而不说明原因 - 这是因为实际文件太大而需要,还是抛出异常? (4) 问题中没有错误信息
  • 感谢您找到解决方案

标签: c#


【解决方案1】:

我已将您的 xml 字符串存储在字符串变量中,然后我在字符串上应用了正则表达式匹配集合以提取 VNUMBER 值列表

using System;
using System.Xml;
using System.Text.RegularExpressions;

namespace SOFAcrobatics
{
    public static class Launcher
    {
        public static void Main ()
        {
            String xml = @"<VOUCHER>
    <REFERENCE TYPE=""String"">100</REFERENCE>
    <VNUMBER>568</VNUMBER>
</VOUCHER>  
<VOUCHER>
    <REFERENCE TYPE=""String"">100</REFERENCE>
    <VNUMBER>2</VNUMBER>
</VOUCHER>";
            foreach (Match m in Regex.Matches(xml, @"<VNUMBER>(\d+)</VNUMBER>"))
            {
                Console.WriteLine(m.Groups[1].Value);
            }
            Console.ReadKey(true);
        }
    }
}

【讨论】:

  • 这是最简单的方法,因为您在使用 XMLDocument 类时遇到问题
  • 这不是一个好的解决方案。它将拾取标记为 的任何节点,而不是特定 XML 路径中的节点。不幸的是,张贴者并没有准确解释 XmlDocument 的问题 - 如果这个 XML 是准确的,那么他只需要一个根节点。
  • @PeterMorris XML 文档的问题是命名空间集群****。一些白痴将其设计为无法解析。同意的正则表达式不好。 OP 应该只是替换 /&lt;(/?)UDF:/ 或其他东西。
  • @EdPlunkett 我最初认为呈现的 XML 是说明性的,所以没有真正的方法知道为什么 XDocument 不可接受(格式错误、文档大小、偏好),但似乎只是缺少一个根 XML 节点和星号已被添加以引起我们对所需值的注意 - 一个非常糟糕的问题。
【解决方案2】:

如果文件太大而无法加载到 XDocument 中,则使用 XmlReader 类,它是一个非缓存的只进 XML 阅读器。

https://msdn.microsoft.com/en-us/library/system.xml.xmlreader(v=vs.110).aspx

如果不是这样,那么问题在于您的 XML 格式不正确。如果您发布的示例数据是真实的,那么您在某些 XmlNode 周围有星号,并且您缺少一个根节点。

现在您已经用真实数据和实际错误消息更新了您的问题,我认为其他帖子将回答您的问题'xsi' is an undeclared prefix using XmlDocument

【讨论】:

  • 想解释一下为什么?上面的格式是不是无效的xml?
  • xml 不是有效的 xml
猜你喜欢
  • 2015-10-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-04-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多