我正在尝试使用XPath从xml文档中选择特定值。 xml存储在字符串varibale“tmp”中。此xml是在外部API上执行查询的结果。
示例XML内容:
<?xml version="1.0" encoding="ISO-8859-1"?>
<Results>
<Checks>
<Check id="wbc">
<Linespeed>6000 </Linespeed>
<Provider>BT WBC </Provider>
</Check>
<Check id="adsl">
<Linespeed>2048 </Linespeed>
<Provider>BT ADSL </Provider>
</Check>
</Checks>
</Results>
在后面的代码中使用XPATH我希望能够仅为<Linespeed>
选择<Provider>
和id=adsl
,然后将值存储在字符串变量中供以后使用。我希望在没有使用单独的xslt样式表的情况下实现这一目标。对此的任何帮助将不胜感激!
提前致谢
感谢大家的帮助,使用xpath表达式,我现在想要实际使用它,如下所示:
//Creating an XPATH epression
String strExpression1;
strExpression1 = "Results/Checks/Check[@id = 'adsl']/Linespeed";
//Loading the xml document
XmlDocument doc;
doc = new XmlDocument();
doc.LoadXml(tmp);
//Create an XmlNamespaceManager to resolve the default namespace.
XmlNamespaceManager nsmgr = new XmlNamespaceManager(doc.NameTable);
nsmgr.AddNamespace("bk", "urn:schemas-microsoft-com:xslt");
//Selecting Linespeed from Check id='adsl'
XmlNode Check;
XmlElement root = doc.DocumentElement;
Check = root.SelectSingleNode(strExpression1, nsmgr);
//Assigning the the results of the XPATH expression to the string variable Linespeedval
string Linespeedval = Check.ToString();
//Adding a control to display the xpath results of the xml query
AvailabilityCheckerResults2.Controls.Add(new
LiteralControl(Linespeedval));
理论上我应该能够看到PlaceHolder里面名为“AvailabilityCheckerResults2”的页面上显示的值,但我得到了一个错误。有没有办法将xpath表达式的结果分配给字符串变量?再次感谢
答案 0 :(得分:1)
以此为出发点。
var elements = XElement.Parse(tmp).Elements("Checks").Elements("Check").Where (xe => xe.Attribute("id").Value=="adsl");
答案 1 :(得分:1)
尝试/Results/Checks/Check[@id='adsl']/Linespeed
或/Results/Checks/Check[@id='adsl']/Provider
(你想选择什么,你错过了吗?)
答案 2 :(得分:1)
为<Linespeed/>
<Provider/>
和<Check id="adsl"/>
的xpath表达式
是://Linespeed[ancestor::Check[@id = 'adsl']]
&lt; - 这将选择其祖先是具有id = adsl的检查元素的所有Linespeed节点
或者你可以使用类似的东西:
/Results/Checks/Check[@id = 'adsl']/Linespeed
这将选择行速度,该行速度是具有@id ='adsl'的Check的子项,因为它在您的文档中。
对于提供商,您可以使用相同的方法。
答案 3 :(得分:1)
我希望能够仅为
<Linespeed>
和<Provider>
选择 ID = ADSL
使用强>:
/*/*/Check[@id = 'adsl']/*[self::Linespeed or self::Provider]
这会选择Linespeed
或Provider
元素作为Check
的子元素,其id
属性为"adsl"
的字符串值为XML文档顶部元素的祖母。
如果确保Check
只能有Linespeed
或Provider
个孩子,那么上述内容可以简化为:
/*/*/Check[@id = 'adsl']/*
这将选择Check
的子元素的任何元素,其id
属性为"adsl"
的字符串值,并且是XML文档顶部元素的子元素
如果您只想选择Linespeed
元素,请使用:
/*/*/Check[@id = 'adsl']/Linespeed
如果您只想选择Provider
元素,请使用:
/*/*/Check[@id = 'adsl']/Provider