如何使用c#从节点数据中选择xml节点

时间:2016-06-07 18:38:55

标签: c# xml

我有一个XML,其数据看起来像

<Chart>
<History>
<Master_Medication_List>
<Item1>
<ndcnumber>00121478105</ndcnumber>
</Item1>
</Master_Medication_List>
</History>
</Chart>  

现在我想使用此代码选择节点

objEncList = objXml.SelectNodes("//Chart/History/Master_Medication_List/Item1/*[ndcnumber='" + strProductCode + "']");  

但它没有选择任何节点。

3 个答案:

答案 0 :(得分:0)

这是一个元素,所以您只需访问它:

objEncList = objXml.SelectNodes("//Chart/History/Master_Medication_List/Item1/ndcnumber");

这是节点,节点的值是实际值。

如果您有多个Item1,我认为您可以通过以下方式选择它:

objEncList = objXml.SelectNodes("//Chart/History/Master_Medication_List/Item1/ndcnumber[text()='00121478105']");

答案 1 :(得分:0)

您想要按内容选择元素。 ndcnumber[.='content']就是这样做的。所以要么

objEncList = objXml.SelectNodes("
    //Chart/History/Master_Medication_List/Item1/ndcnumber[.='" + strProductCode + "']"
);

或者,如果objXml已经是实际的根,请省略它:

objEncList = objXml.SelectNodes("
    /History/Master_Medication_List/Item1/ndcnumber[.='" + strProductCode + "']"
);

答案 2 :(得分:0)

如果您要选择具有值为<Item1>的嵌套<ndcnumber>元素的所有00121478105元素,您应执行以下操作:

var itemList = objXml.SelectNodes("//Chart/History/Master_Medication_List/Item1[ndcnumber='" + strProductCode + "']");  

如果您要选择值<ndcnumber>的所有00121478105元素,您应该这样做:

var ndcnumberList = objXml.SelectNodes("//Chart/History/Master_Medication_List/Item1/ndcnumber[text()='" + strProductCode + "']");  

(从你的问题中不清楚你想要什么。)

注意:

  • XPath查询区分大小写,因此您需要完全匹配元素名称。
  • 您的查询字符串中有一个级别太多:Item1/*[ndcnumber=...表示“查找具有特定值的名为ndcnumber的子项的Item1的任何子级。
  • 如果strProductCode是用户输入的字符串,请注意XPath注入攻击。请参阅XPath injection mitigationHow to prevent XPath/XML injection in .NET

示例fiddle