我有一个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 + "']");
但它没有选择任何节点。
答案 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 + "']");
(从你的问题中不清楚你想要什么。)
注意:
Item1/*[ndcnumber=...
表示“查找具有特定值的名为ndcnumber
的子项的Item1的任何子级。strProductCode
是用户输入的字符串,请注意XPath注入攻击。请参阅XPath injection mitigation和How to prevent XPath/XML injection in .NET。示例fiddle。