[英]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.