首页 文章

获取具有特定属性的元素

提问于
浏览
0

我的XML看起来像这样

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

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

我的尝试是:(假设“a”是上面的XML文件)

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

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

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

谢谢

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

在我的问题中,我看到我并不清楚和准确 . 我希望它返回的是:`Messages =“Another”

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

a.selectSingleMode("//@Messages")

它会打印 Messages="1"

如何在有Labelvisibility属性的地方打印“Message”的属性值?

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

1 回答

  • 3

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

    固定版本:

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

    即包含Messages和Labelvisibility属性的所有元素 . 如果检查消息属性是否过剩,则可以简单地删除此谓词 .


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

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

    如何在有Labelvisibility属性的情况下打印“Message”的属性值?因此它将打印2(因为值2是有标签可见性的地方)

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

相关问题