使用LINQ,我如何检查XML行是否包含字段,以及是否检查同一行上的其他字段是否为值

时间:2018-03-01 16:41:19

标签: c# linq

我有一个场景,应用程序正在向我吐出一些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标签对于数据集和我有兴趣计数的行是唯一的。我还需要检查两个字段中的值,因为它是我发现的组合,告诉我是否应该计算行。

1 个答案:

答案 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']");