繁体   English   中英

使用LINQ,我将如何检查XML行是否包含一个字段,以及是否确实在同一行的另一个字段中检查值

[英]Using LINQ how would I check if a XML row contains a field and if it does check a different field on the same row for a value

我有一个场景,一个应用程序向我吐出一些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>

因此,我需要做的基本上是在我找到标签时进行计数,并且在同一行中标签的值为“是”。 如果可能的话,我想用LINQ做到这一点。

编辑:要更清楚一点。 我以为是因为Dataset和Row标签是重复的,并且没有唯一的名称,所以我无法确定要检查我的计数的特定名称。 我所知道的是,ACCEPTED和COND1标签对于我要计数的数据集和行是唯一的。 我还需要检查两个字段中的值,因为这是我发现告诉我是否应该对行进行计数的组合。

您的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']");

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM