【问题标题】:How to select xml node from node data using c#如何使用c#从节点数据中选择xml节点
【发布时间】:2016-06-07 18:38:54
【问题描述】:

我有一个 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 + "']");  

但它没有选择任何节点。

【问题讨论】:

  • strProductCode 是你的 ndcnumber 对吗?
  • 是 strProductCode = 00121478105
  • 不,不区分大小写错误。

标签: c# xml


【解决方案1】:

您想按内容选择元素。 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】:

    这是一个元素,所以你可以像这样访问它:

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

    即节点,节点的值就是实际值。

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

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

    【讨论】:

      【解决方案3】:

      如果您要选择所有 &lt;Item1&gt; 元素,其中嵌套的 &lt;ndcnumber&gt; 元素的值为 00121478105,您应该这样做:

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

      如果您要选择所有值为00121478105&lt;ndcnumber&gt; 元素,您应该这样做:

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

      (从您的问题中不清楚您想要哪个。)

      注意事项:

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

      例如fiddle

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多