使用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表达式的结果分配给字符串变量?再次感谢

使用XPATH从XML文档中选择特定的值

<Check id="adsl"/>选择<Linespeed/><Provider/>的xpath表达式

is: //Linespeed[ancestor::Check[@id = 'adsl']] <——选择所有祖先是id = adsl

的检查元素的linspeed节点

你也可以这样写:

/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的子元素LinespeedProvider元素,id属性的字符串值为"adsl",并且是XML文档顶部元素的孙子元素。

如果保证Check只能有LinespeedProvider子节点,则上述可以简化为:

/*/*/Check[@id = 'adsl']/*

选择Check的子元素,其id属性的字符串值为"adsl",并且是XML文档的top元素的孙子元素。

如果你想只选择Linespeed元素,使用:

/*/*/Check[@id = 'adsl']/Linespeed

如果你想只选择Provider元素,使用:

/*/*/Check[@id = 'adsl']/Provider