使用XPATH从XML文档中选择特定的值
本文关键字:选择 XPATH XML 文档 使用 | 更新日期: 2023-09-27 18:13:00
我正在尝试使用XPath从xml文档中选择特定值。xml存储在字符串变量"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,我希望能够仅为id=adsl
选择<Linespeed>
和<Provider>
,然后将值存储在字符串变量中供以后使用。我希望在不使用单独的xslt样式表的情况下实现这一点。对此的任何帮助都将不胜感激!
Thanks in advance
感谢每个人的帮助,现在我想实际使用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));
理论上我应该能够看到被显示在名为"AvailabilityCheckerResults2"的占位符内的页面上的值,但我得到一个错误,而不是。是否有一种方法将xpath表达式的结果分配给字符串变量?再次感谢
为<Check id="adsl"/>
选择<Linespeed/>
和<Provider/>
的xpath表达式
is: //Linespeed[ancestor::Check[@id = 'adsl']]
<——选择所有祖先是id = adsl
你也可以这样写:
/Results/Checks/Check[@id = 'adsl']/Linespeed
这是选择的行速度,这是一个子检查@id = 'adsl',因为它站在你的文档。
对于提供者,您可以使用相同的方法。
尝试/Results/Checks/Check[@id='adsl']/Linespeed
或/Results/Checks/Check[@id='adsl']/Provider
(您想选择什么,您错过了吗?)
试试这个作为起点。
var elements = XElement.Parse(tmp).Elements("Checks").Elements("Check").Where (xe => xe.Attribute("id").Value=="adsl");
使用我希望能够选择
<Linespeed>
和<Provider>
仅为id = adsl
:
/*/*/Check[@id = 'adsl']/*[self::Linespeed or self::Provider]
选择Check
的子元素Linespeed
或Provider
元素,id
属性的字符串值为"adsl"
,并且是XML文档顶部元素的孙子元素。
如果保证Check
只能有Linespeed
或Provider
子节点,则上述可以简化为:
/*/*/Check[@id = 'adsl']/*
选择Check
的子元素,其id
属性的字符串值为"adsl"
,并且是XML文档的top元素的孙子元素。
如果你想只选择Linespeed
元素,使用:
/*/*/Check[@id = 'adsl']/Linespeed
如果你想只选择Provider
元素,使用:
/*/*/Check[@id = 'adsl']/Provider