我正在尝试使用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样式表的情况下实现这一点。在这方面的任何帮助都将非常感谢!
提前感谢
感谢大家的帮助,使用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表达式的结果赋给字符串变量?再次感谢
发布于 2011-11-02 21:53:42
为<Check id="adsl"/>选择<Linespeed/>和<Provider/>的xpath表达式
is://Linespeed[ancestor::Check[@id = 'adsl']] <--这将选择其祖先是id = adsl的检查元素的所有线速节点
或者,您可以使用类似以下内容:
/Results/Checks/Check[@id = 'adsl']/Linespeed 这将选择线速,它是文档中带有@id = 'adsl‘的复选标记的子项。
对于提供者,您可以使用相同的方法。
发布于 2011-11-02 21:47:18
试着以此为起点。
var elements = XElement.Parse(tmp).Elements("Checks").Elements("Check").Where (xe => xe.Attribute("id").Value=="adsl");发布于 2011-11-02 21:53:23
试试/Results/Checks/Check[@id='adsl']/Linespeed或/Results/Checks/Check[@id='adsl']/Provider (你想选择什么,你错过了吗?)
https://stackoverflow.com/questions/7981266
复制相似问题