C#解析对数组的XML响应

C#解析对数组的XML响应,c#,xml,C#,Xml,我正在使用一个第三方系统,该系统返回以下xml响应 {<origenxml type="data"> <data> <item> <id><![CDATA[PIN/4590/67]]></id> <filename><![CDATA[CS.STAR]]></filename> <group> <id>MAIN</id> <dictionary id

我正在使用一个第三方系统,该系统返回以下xml响应

{<origenxml type="data">
<data>
<item>
<id><![CDATA[PIN/4590/67]]></id>
<filename><![CDATA[CS.STAR]]></filename>
<group>
<id>MAIN</id>
<dictionary id="CS.ST.BOXNO">
<desc><![CDATA[boxes]]></desc>
<value ln="0"></value>
<raw-value ln="0"></raw-value>
<value ln="1"><![CDATA[121880 ]]></value>
<raw-value ln="1"><![CDATA[B-FILE394**BCBF*BC*121880*]]></raw-value>
<value ln="2"><![CDATA[121881 ]]></value>
<raw-value ln="2"><![CDATA[B-FILE394**BCBF*BC*121881*]]></raw-value>
<value ln="3"><![CDATA[121882 ]]></value>
<raw-value ln="3"><![CDATA[B-FILE394**BCBF*BC*121882*]]></raw-value>
<value ln="4"><![CDATA[940288 ]]></value>
<raw-value ln="4"><![CDATA[B-FILE80**BCBF*BC*940288*]]></raw-value>
<value ln="5"><![CDATA[170415 ]]></value>
<raw-value ln="5"><![CDATA[ALPHA**BC*BC*170415*]]></raw-value>
</raw-value>
</dictionary>
</group>
</item>
</data>
</origenxml>}
{
主要
}

框下的每一行表示一个对象,其中值是Id,原始值是数据(因此第5行-Id=170415,值=ALPHA**BC*BC*170415*),但我确实无法找到解析xml的最佳方法。我无法控制响应xml,因此我无法获得任何有用的东西,比如额外的节点名称。首先,我要确保这确实是xml,因为它的格式不正确。在
前面有一个浮动的
结束标记。假设这是一个错误,那么使用Linq over XML解决方案很容易

您需要使用语句添加以下

using System.IO;
using System.Xml.Linq;
我在控制台应用程序中创建了这个示例,但是您应该能够轻松地对其进行调整。第一步是从XML创建
XDocument
对象。我从一个常量字符串值中提取文本

static XDocument CreateDocument()
{
    using (var reader = new StringReader(testData)) {
        return XDocument.Load(reader);
    }
}
剩下的只是创建一个查询并枚举它

var doc = CreateDocument();

var results = from value in doc.Descendants("value")
                join rawValue in doc.Descendants("raw-value")
                on value.Attribute("ln").Value equals rawValue.Attribute("ln").Value
                select new { Value = value.Attribute("ln").Value, RawValue = rawValue.Value };

foreach (var result in results) {
    Console.WriteLine($"{result.Value} => {result.RawValue}");
}

很抱歉,浮动标签是我的错误,为了简洁起见,我删除了很多行。我会试一试的,谢谢!太棒了,我做了一个小小的改变(我的问题不清楚),但除此之外,这正是我所需要的!选择新的{Value=Value.Value,RawValue=RawValue.Value};