首页 文章

如何编写xpath以提取具有属性和值的条件的节点值

提问于
浏览
1

使用我的c#应用程序,我需要编写一个xpath,检查具有属性 alias 的节点是否包含值, titlekeywords ,包含字符串值,说 knowledge 返回带有 aliasdescription 的节点值 .

我的样本xml如下 . 我将需要xml中的值 required description

<?xml version="1.0" encoding="UTF-8"?>
<nodes>
 <node> 
   <data alias="title">knowledge is power</data>
   <data alias="description">required description</data>
   <data alias="keywords">knowledge, power</data>   
</node>

 <node> 
   <data alias="title">Another title</data>
   <data alias="description">Lorem ipsum dolor sit amet, consectetur adipiscing elit </data>
   <data alias="keywords">Lorem, Ipsum</data>
 </node>
</nodes>

我正在尝试这些线路,但它似乎不起作用

if (xdoc.SelectNodes("nodes/node/data[(@alias='title' or 'keywords')]/[contains(., 'knowledge')]").Count > 0)
   {
      // extract the description node value here
   }

2 回答

  • 1
    string[] text = new string[10];
    if (xDoc.SelectNodes("nodes/node/data[@alias='title' or @alias='keywords'][contains(text(),'knowledge')]").Count > 0)
    {
        var xmlNodes = xDoc.SelectNodes("nodes/node/data[@alias='title' or @alias='keywords'][contains(text(),'knowledge')]");
        int i=-1;
        foreach (XmlNode item in xmlNodes)
        {
            i++;
            text[i] = item.InnerText.ToString();
        }
    }
    
  • 0

    您需要在或两侧指定@alias:

    if (xdoc.SelectNodes("nodes/node/data[@alias='title' or @alias='keywords']/[contains(., 'knowledge')]").Count > 0)
    

相关问题