我有一个场景,应用程序正在向我吐出一些XML,而我无法控制它在下面发布的结构。
<?xml version="1.0"?>
<DATASET xmlns:dt="urn:schemas-microsoft-com:datatypes">
<ROW>
<OccNumber >test</OccNumber>
<OccId >Test2</OccId>
<OccTime >2017/01/26 09:38</OccTime>
<OccSummary >Test worked</OccSummary>
<DATASET>
<ROW>
<PID>123456</PID>
<CID >12345678</CID>
</ROW>
<ROW>
<PID>569867</PID>
<CID>37576334</CID>
</ROW>
<DATASET>
<ROW>
<ReportId >4345454</ReportId>
<ReportTime >2018/02/15 12:55</ReportTime>
<NumberType4 />
<accepted >Yes</accepted>
<cond1>No </Cond1>
</ROW>
</DATASET>
</ROW>
</DATASET>
所以我需要做的是基本计算任何时候我找到一个标签,并且在同一行中标签的值为&#34;是&#34;。如果可能的话,我想用LINQ做这件事。
编辑: 要更清楚一点。我假设因为数据集和行标记重复并且没有唯一的名称,我无法识别特定的名称以检查我的计数。我所知道的是,ACCEPTED和COND1标签对于数据集和我有兴趣计数的行是唯一的。我还需要检查两个字段中的值,因为它是我发现的组合,告诉我是否应该计算行。
答案 0 :(得分:0)
您的XML无效(缺少其中一个DATASET元素的结束标记,cond1元素中的不同情况)。下面是一些更正的XML,其中包含可用于测试的其他节点,以及其下方的一些代码,显示了如何选择您感兴趣的节点。
<?xml version="1.0"?>
<DATASET xmlns:dt="urn:schemas-microsoft-com:datatypes">
<ROW>
<OccNumber >test</OccNumber>
<OccId >Test2</OccId>
<OccTime >2017/01/26 09:38</OccTime>
<OccSummary >Test worked</OccSummary>
<DATASET>
<ROW>
<ReportId >4345454</ReportId>
<ReportTime >2018/02/15 12:55</ReportTime>
<NumberType4 />
<cond1>No</cond1>
</ROW>
</DATASET>
<DATASET>
<ROW>
<ReportId >4345454</ReportId>
<ReportTime >2018/02/15 12:55</ReportTime>
<NumberType4 />
<accepted>Yes</accepted>
<cond1>No</cond1>
</ROW>
</DATASET>
<DATASET>
<ROW>
<PID>123456</PID>
<CID >12345678</CID>
</ROW>
<ROW>
<PID>569867</PID>
<CID>37576334</CID>
</ROW>
</DATASET>
<DATASET>
<ROW>
<ReportId >4345454</ReportId>
<ReportTime >2018/02/15 12:55</ReportTime>
<NumberType4 />
<accepted>Yes</accepted>
<cond1>No</cond1>
</ROW>
</DATASET>
</ROW>
</DATASET>
代码:
var xdoc = new XmlDocument();
xdoc.LoadXml("YOUR XML STRING HERE");
var nodes = xdoc.SelectNodes("//DATASET/ROW[accepted='Yes' and cond1='No']");