C# 将LinqToXml表达式转换为XPath

C# 将LinqToXml表达式转换为XPath,c#,xml,linq,xpath,C#,Xml,Linq,Xpath,我有一个linq表达式,需要转换为XPath select元素: XElement transIdElement = (from criteria in searchCriteria.Descendants("CRITERIA") where criteria.Element("DataPointName).Value == "TransactionNumber" select cri

我有一个linq表达式,需要转换为XPath select元素:

XElement transIdElement = (from criteria in searchCriteria.Descendants("CRITERIA") 
                           where criteria.Element("DataPointName).Value == "TransactionNumber" 
                           select criteria.Element("CriteriaComparisonValue")).FirstOrDefault();
我试着用这个:

var transIdElement = searchCriteria.XPathSelectElement("//CRITERIA/DataPointName[text() = 'TransactionNumber']/CriteriaComparisonValue");
但我得到的结果是空的

XML示例是:

<SEARCH>
    <ADVANCED_CRITERIA>
        <CRITERIA>
            <DataPointName>TransactionNumber</DataPointName>
            <CriteriaComparisonValue>12457845</CriteriaComparisonValue>
        </CRITERIA>
     </ADVANCED_CRITERIA>
</SEARCH>

交易编号
12457845

使用
访问
父节点()
,然后重试

//标准/DataPointName[text()='TransactionNumber']/../CriteriaComparisonValue

LINQpad中的快速测试:

var f = @"c:\temp\x\a.xml";
var searchCrit = XDocument.Load(f);
searchCrit.XPathSelectElement("//CRITERIA/DataPointName[text() = 'TransactionNumber']/../CriteriaComparisonValue").Value.Dump();
产生

12457845

使用
访问
父节点()
,然后重试

//标准/DataPointName[text()='TransactionNumber']/../CriteriaComparisonValue

LINQpad中的快速测试:

var f = @"c:\temp\x\a.xml";
var searchCrit = XDocument.Load(f);
searchCrit.XPathSelectElement("//CRITERIA/DataPointName[text() = 'TransactionNumber']/../CriteriaComparisonValue").Value.Dump();
产生

12457845
void Main()
{
字符串xml=@“
交易编号
12457845
";
var searchCriteria=XElement.Parse(xml);
searchCriteria.XPathSelectElements(//CRITERIA[DataPointName='TransactionNumber']/CriteriaComparisonValue”).Dump();
}
void Main()
{
字符串xml=@“
交易编号
12457845
";
var searchCriteria=XElement.Parse(xml);
searchCriteria.XPathSelectElements(//CRITERIA[DataPointName='TransactionNumber']/CriteriaComparisonValue”).Dump();
}

LINQ到XML查询的更准确XPath转换如下:

//CRITERIA[DataPointName = 'TransactionNumber']/CriteriaComparisonValue
下面简要介绍上述谓词表达式(方括号中的表达式)的工作原理

DataPointName
引用上下文元素名为
“DataPointName”
的子元素。在这个特定谓词中,上下文元素是
CRITERIA


“TransactionNumber”
加引号表示XPath中的文字字符串。将元素与XPath中的字符串进行比较时,通过调用XPath
string()
函数将元素转换为字符串。

LINQ到XML查询的更准确XPath转换如下:

//CRITERIA[DataPointName = 'TransactionNumber']/CriteriaComparisonValue
下面简要介绍上述谓词表达式(方括号中的表达式)的工作原理

DataPointName
引用上下文元素名为
“DataPointName”
的子元素。在这个特定谓词中,上下文元素是
CRITERIA

“TransactionNumber”
加引号表示XPath中的文字字符串。将元素与XPath中的字符串进行比较时,通过调用XPath
string()
函数将元素转换为字符串