获取具有特定属性的元素

时间:2014-11-27 11:15:41

标签: xml xpath

我的XML看起来像这样

<Data>
  <a Messages="1">
  <b Messages="2" Labelvisibility="yes">
  <c Messages="3">
</Data>

我想选择具有名为Labelvisibility属性的元素。一次只会有一个这样的元素。

我的尝试是:(假设&#34; a&#34;是上面的XML文件)

var b = a.selectSingleNode("//Messages[@Labelvisibility]");

根据w3schools,这个表达式://title[@lang]选择所有具有名为lang的属性的标题元素

所以我试图通过以下示例获取具有属性名称Labelvisibility的元素,但我的代码返回null。我究竟做错了什么?如果有比w3schools更安全/更智能的方式,请分享。

由于

-------------------------------更新--------------- ----------------------.....

我发现在我的问题中我并不清楚和准确。 我希望它返回的是:`Messages =&#34; Another&#34;

在另一种情况下,我希望它只返回属性值`。如果我这样做:

a.selectSingleMode("//@Messages")

它会打印Messages="1"

如何打印&#34;消息&#34;的属性值?哪里有Labelvisibility属性?

这样它将打印2(因为值2是标签可见性的地方)

1 个答案:

答案 0 :(得分:3)

您的XML中没有Messages元素,这就是结果为null的原因。

修正版:

var b = a.selectSingleNode("//*[@Messages][@Labelvisibility]");

即。包含Messages和Labelvisibility属性的所有元素。如果检查Messages属性是否过剩,那么您可以简单地删除该谓词。


  

a.selectSingleMode( “// @消息”)   它将打印Messages =“1”

这是因为// @ Messages返回三个属性节点,1是根据文档顺序的第一个。

  

如何在有Labelvisibility属性的情况下打印“Message”的属性值?

     

因此它将打印2(因为值2是有标签可见性的地方)

var b = a.selectSingleNode("//*[@Labelvisibility]/@Messages");