C# XPath来访问xml中的标签/值节点
我正在尝试访问下面xml中的标签/值节点。我必须匹配标签并获得值C# XPath来访问xml中的标签/值节点,c#,xpath,C#,Xpath,我正在尝试访问下面xml中的标签/值节点。我必须匹配标签并获得值 <OneStopCenterResult> <OneStopCenterInfoResults> <OneStopCenterInfo> <LabelValues> <Label>Name of Center</Label> <Value>Arlington Employment Center</Value>
<OneStopCenterResult>
<OneStopCenterInfoResults>
<OneStopCenterInfo>
<LabelValues>
<Label>Name of Center</Label>
<Value>Arlington Employment Center</Value>
</LabelValues>
<LabelValues>
<Label>ADDRESS_1</Label>
<Value>2100 Washington Blvd</Value>
</LabelValues>
</OneStopCenterInfo>
</OneStopCenterInfoResults>
</OneStopCenterResult>
C#函数调用我正在使用下面的函数根据标签值检索标签/值
private string GetHTMLTableString(XmlDocument xmlResults)
{
//Sort the table based on EmpCount
string outPutString = string.Empty;
XmlNodeList empDetail=null;
try
{
//the below code is not working
empDetail = xmlResults.SelectNodes("/OneStopCenterResult/OneStopCenterInfoResults/OneStopCenterInfo/LabelValues[Label] ='Name of Center'");
//foreach (XmlNode node in empDetail)
//{
// Response.Write(" for loop " + node.SelectSingleNode("/Label").Value);
//}
}
catch (Exception ex)
{
Response.Write(" Error " +ex.ToString());
Response.End();
}
}
提前感谢您可以直接使用,尽管这会导致出现一个类似于//LabelValues/Value[previous sibling::Label[1]=“Name of Center”]/text()的复杂表达式,该表达式查找文本()
一个值的元素,其第一个前面的同级::Label
元素包含中心的名称
。测试用例通过:
%cat label.xml
中心名称
v
%xpquery'//LabelValues/Value[前面的同级::Label[1]=“中心名称”]/text()”Label.xml
v
%
Hmm可能依赖于实现;您的将获取元素,而不是文本:
% xpquery '//LabelValues/Value[preceding-sibling::Label="Name of Center"]' label.xml
<Value>v</Value>
%xpquery'//LabelValues/Value[前面的同级::Label=“中心名称”]”Label.xml
v
XmlNode ajcNode=xmlResults。选择singlenode(“/OneStopCenterResult/OneStopCenterInfoResults/OneStopCenterInfo/LabelValues/Label[text()='Name of Center']”;-这将返回中心的名称XmlNode ajcNodeValue=xmlResults。选择SingleNode(“/OneStopCenterResult/OneStopCenterInfoResults/OneStopCenterInfo/LabelValues/Value[前面的同级::Label[1]='Name of Center']/text()”;这将返回emptyi刚刚将代码更正为XmlNode ajcNodeValue=xmlResults。选择SingleNode(“/OneStopCenterResult/OneStopCenterInfoResults/OneStopCenterInfo/LabelValues/Value[前面的同级::Label='Center']名称]”;它起作用了!!
% cat label.xml
<foo>
<LabelValues>
<Label>Name of Center</Label>
<Value>v</Value>
</LabelValues>
</foo>
% xpquery '//LabelValues/Value[preceding-sibling::Label[1]="Name of Center"]/text()' label.xml
v
%
% xpquery '//LabelValues/Value[preceding-sibling::Label="Name of Center"]' label.xml
<Value>v</Value>