解析字符串xmlc#

解析字符串xmlc#,c#,C#,我有一个从stream.readtoend()返回的字符串XML 100 568 注册交易商 100 2. 注册交易商 我需要从字符串XML中提取VNUMBER的值。无法在XMLDocument中加载此字符串。如果有任何选择,请告诉我们 它有2个VNUMBER节点。我需要得到568和2的值 当我加载到XMLDOcument时,我发现错误“UDF”是一个未声明的前缀 谢谢 Joe如果文件太大,无法加载到XDocument中,则使用XmlReader类,它是一个非缓存的仅向前的XML读取器 如

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


100
568
注册交易商
100
2.
注册交易商
我需要从字符串XML中提取
VNUMBER
的值。无法在XMLDocument中加载此字符串。如果有任何选择,请告诉我们

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

当我加载到XMLDOcument时,我发现错误“UDF”是一个未声明的前缀

谢谢


Joe

如果文件太大,无法加载到XDocument中,则使用XmlReader类,它是一个非缓存的仅向前的XML读取器

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


现在,您已经用实际数据和实际错误消息更新了您的问题,我想这篇文章将回答您的问题

我已经将您的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);
        }
    }
}
使用系统;
使用System.Xml;
使用System.Text.RegularExpressions;
命名空间杂技
{
公共静态类启动器
{
公共静态void Main()
{
字符串xml=@“
100
568
100
2.
";
foreach(在Regex.Matches(xml,@“(\d+))中匹配m)
{
Console.WriteLine(m.Groups[1].Value);
}
Console.ReadKey(true);
}
}
}

您尝试过什么?什么不起作用?我们在这里不为您做这些工作,只是帮助您解决问题。我尝试了XMLDocument、XDOCuemt和StreamreaderPost示例代码,并对您遇到的问题进行了否决,因为(1)您发布了XML摘录,因此无法知道到节点的路径(2)XML看起来像一个示例,而不是一个复制/粘贴,因为其中有星号以引起读者的注意(3)您说字符串不会加载到XmlDocument中,但没有说明原因-这是一个要求,因为实际文件太大,还是引发了异常?(4) 问题中未包含错误消息谢谢您找到解决方案请解释原因?上述格式是无效的xml吗?xml不是有效的xml这是最简单的方法,因为您在使用XMLDocument类时遇到问题。这不是一个好的解决方案。它将拾取任何标记的节点,而不是特定XML路径中的节点。不幸的是,海报没有准确解释XmlDocument的问题所在-如果这个XML是准确的,那么他只需要一个根节点。@PeterMorris XML文档的问题是命名空间集群****。某个白痴设计得不可原谅。约定的正则表达式是不好的。OP可能应该取代
/@EdPlunkett。我最初认为提供的XML是说明性的,因此没有真正的方法知道为什么XDocument是不可接受的(格式错误、文档大小、首选项),但它似乎只是缺少了一个根XML节点,并且添加了星号以吸引我们对所需值的注意——这是一个非常糟糕的问题。
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);
        }
    }
}