C# 如何编写xpath来提取节点值,并在属性和值上设置条件

C# 如何编写xpath来提取节点值,并在属性和值上设置条件,c#,xml,xpath,C#,Xml,Xpath,使用我的c#应用程序,我需要编写一个xpath来检查属性为alias的节点是否有值、title或keywords,包含字符串值,比如knowledge返回属性为alias,description的节点值 我的示例xml如下所示。我需要xml中的值所需描述 <?xml version="1.0" encoding="UTF-8"?> <nodes> <node> <data alias="title">knowledge is power&

使用我的c#应用程序,我需要编写一个xpath来检查属性为
alias
的节点是否有值、
title
keywords
,包含字符串值,比如
knowledge
返回属性为
alias
description
的节点值

我的示例xml如下所示。我需要xml中的值
所需描述

<?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>

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

if (xdoc.SelectNodes("nodes/node/data[@alias='title' or @alias='keywords']/[contains(., 'knowledge')]").Count > 0)
if (xdoc.SelectNodes("nodes/node/data[@alias='title' or @alias='keywords']/[contains(., 'knowledge')]").Count > 0)
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();
    }
}