我已經參考了XPathSelectElement select the second when there is more than one和XPath and XPathSelectElement。但這是一個不同的問題。基於其他元素值選擇元素
我有以下的XML。我需要找出與Sequence 2相對應的Message元素值(來自StatusDetail)。如果沒有序列2存在,它應該返回null。使用XPathSelectElement
在C#中執行此操作的最佳方法是什麼?
注意:可以有任何數量的StatusDetail(或者根本沒有)的
注:StatusDetail元件可以是任何順序。我們需要在2
CODE
XDocument xDoc = XDocument.Parse(@"
<Status>
<StatusMsg>
<StatusType>INVOICE</StatusType>
<StatusCode>READYPAY</StatusCode>
<StatusTimestamp>2013-03-19T21:20:54Z</StatusTimestamp>
<StatusDetail>
<Sequence>1</Sequence>
<Message>.Document posted successfully </Message>
</StatusDetail>
<StatusDetail>
<Sequence>2 </Sequence>
<Message>Invoice is ready for pay</Message>
</StatusDetail>
</StatusMsg>
</Status>
");
var statusDetails = xDoc.XPathSelectElements(@"Status/StatusMsg/StatusDetail");
UPDATE
下面只查找值「2」是,我使用基於所選答案的解決方案
var statusDetails = xDoc.XPathSelectElements(@"Status/StatusMsg/StatusDetail/Sequence[text()=2]/../Message").FirstOrDefault();
if (statusDetails != null)
{
selectedMessage = statusDetails.Value;
}
我測試過它和它的作品。你有什麼問題? – MarcinJuraszek 2013-03-20 08:47:56
我不明白你。你如何嘗試在'XPathSelectElements'中應用'Root'?添加'ToList()'枚舉查詢並得到結果爲'List' –
MarcinJuraszek
2013-03-20 08:58:09
以下是我正在使用的。它工作正常。 var statusDetails = xDoc.XPathSelectElements(@「Status/StatusMsg/StatusDetail/Sequence [text()= 2] /../ Message」)。FirstOrDefault(); – Lijo 2013-03-20 09:08:56