首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用XPATH从XML文档中选择特定值?

问使用XPATH从XML文档中选择特定值?
EN

Stack Overflow用户
提问于 2011-11-02 21:37:00
回答 4查看 5.6K关注 0票数 2

我正在尝试使用XPath从xml文档中选择特定值。xml被存储在字符串变量"tmp“中。此xml是在外部API上执行查询的结果。

示例XML内容:

代码语言:javascript
复制
<?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样式表的情况下实现这一点。在这方面的任何帮助都将非常感谢!

提前感谢

感谢大家的帮助,使用xpath表达式,我现在想实际使用它,如下所示:

代码语言:javascript
复制
//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表达式的结果赋给字符串变量?再次感谢

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2011-11-02 21:53:42

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

is://Linespeed[ancestor::Check[@id = 'adsl']] <--这将选择其祖先是id = adsl的检查元素的所有线速节点

或者,您可以使用类似以下内容:

代码语言:javascript
复制
/Results/Checks/Check[@id = 'adsl']/Linespeed 

这将选择线速,它是文档中带有@id = 'adsl‘的复选标记的子项。

对于提供者,您可以使用相同的方法。

票数 1
EN

Stack Overflow用户

发布于 2011-11-02 21:47:18

试着以此为起点。

代码语言:javascript
复制
var elements = XElement.Parse(tmp).Elements("Checks").Elements("Check").Where (xe => xe.Attribute("id").Value=="adsl");
票数 1
EN

Stack Overflow用户

发布于 2011-11-02 21:53:23

试试/Results/Checks/Check[@id='adsl']/Linespeed或/Results/Checks/Check[@id='adsl']/Provider (你想选择什么,你错过了吗?)

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7981266

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档