gpt4 book ai didi

c# - 通过 linq 解析 xml

转载 作者:太空宇宙 更新时间:2023-11-03 11:41:53 25 4
gpt4 key购买 nike

我一直在努力寻找一种好的方法来解析以下类型的 XML 以获得 XML 下方所示的对象集合。请注意,整个设置将是动态的,传入的 xml 的架构可能会发生变化。生成的对象不会改变!出于这个原因,我还创建了一个映射 xml,我将使用它来解析传入的 xml。

这是一个数据 xml 的小例子。除了 之外,还会有大量 (20-30) 个“测试记录”和不同的数据类型。

<TESTREPORT>
<DATASET>
<TESTRECORD>
<ID_SOURCE>Common Value A</ID_SOURCE>
<TESTDATA>
<TEST_NAME>Record Number</TEST_NAME>
<TEST_VALUE>12345</TEST_VALUE>
</TESTDATA>
<TESTDATA>
<TEST_NAME>Software Part Number</TEST_NAME>
<TEST_VALUE>111111</TEST_VALUE>
</TESTDATA>
</TESTRECORD>
<TESTRECORD>
<ID_SOURCE>Common Value B</ID_SOURCE>
<TESTDATA>
<TEST_NAME>Record Number</TEST_NAME>
<TEST_VALUE>23456</TEST_VALUE>
</TESTDATA>
<TESTDATA>
<TEST_NAME>Unit Checksum</TEST_NAME>
<TEST_VALUE>ABCDEF23</TEST_VALUE>
</TESTDATA>
</TESTRECORD>
</DATASET>

这是我设想的映射 XML 的初稿。我目前遇到的问题是如何在使用 LINQ to XML 遍历 元素时让 值“固定”。

<segment code="TEST" segmentid="2">
<datadetails>
<datadetail path="REPORT/DATASET/TESTRECORD">
<datapoint name="Source" path="ID_SOURCE" sticky="??" />
<datapoint name="Data" path="TESTDATA/TEST_NAME" />
<datapoint name="Value" path="TESTDATA/TEST_VALUE" />
</datadetail>
</datadetails>

这是我需要创建的对象(或它们的系列):

new Detail { Source = "Common Value A", Data = "Record Number", Value = "12345" };
new Detail { Source = "Common Value A", Data = "Software Part Number", Value = "111111" };
new Detail { Source = "Common Value B", Data = "Record Number", Value = "23456" };
new Detail { Source = "Common Value B", Data = "Unit Checksum", Value = "ABCDEF23" };

我刚刚放弃了我的第 n 个方法,正在寻找输入。非常感谢您的帮助!

最佳答案

试试这个

var results = from testRecord in xdocument.Descendants("TESTRECORD")
let source = testRecord.Element("ID_SOURCE").Value
from testData in testRecord.Elements("TESTDATA")
select new Detail
{
Source = source,
Data = testData.Element("TEST_NAME").Value,
Value = testData.Element("TEST_VALUE").Value
};

它基本上是一个 SelectMany在您的 XML 上,为每个 TESTRECORD 元素提取公共(public) ID_SOURCE 并将其应用于内部 TESTDATA 元素,生成单个 IEnumerable<Detail> (假设您已经定义了该类)。

关于c# - 通过 linq 解析 xml,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4559873/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com