我的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是标签可见性的地方)
答案 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");