【问题标题】:Get first node using E4X with mixed namespaces?使用 E4X 和混合命名空间获取第一个节点?
【发布时间】:2011-03-21 15:43:53
【问题描述】:

考虑一个带有少量命名空间的 XML sn-p:

<meal xmlns="urn:hl7-org:v3">
    <veg id="7" />
    <lunch id="123">
        <veg id="990" />
    </lunch>
    <dinner id="324">
         <veg id="111" />
    </dinner>
 </meal>

使用 JavaScript E4X,如何显式选择第一个 veg 节点的 id 属性?

明确包含所有命名空间也很重要。这就是下面我的..*:: 语法的原因。我意识到我在这里使用了错误的运算符。

我已经尝试过了,不幸的是它得到了所有的蔬菜节点 id 值:

var veg = meal..*::veg.@id.toString()
//currently gets 7990111

如何获取7的值?

【问题讨论】:

  • XPath 1.0 表达式将是 (//*[local-name()='veg])[1]/@id,XPath 2.0 将是 (//*:veg)[1]/@id。如果您不是在寻找 XPath 解决方案,请重新标记。

标签: javascript e4x


【解决方案1】:

var veg = meal..*::veg[0].@id.

【讨论】:

    【解决方案2】:
    var meal = // xml;
    var veg = meal..*::veg.@id[0];
    

    【讨论】:

    • 我在发布之前没有刷新我的屏幕,我没有意识到这与 Martin 的回复或多或少相同(除了我正在创建一个 id 列表的微小差异,并且他正在创建一个 veg 节点列表)。但是,请注意,XML 的顶级节点(膳食)不需要直接引用,这可能会有所帮助。在我的例子中,我创建了一个与顶部节点同名的变量,我认为这增加了可读性。
    【解决方案3】:

    试试这个: var veg = meal..*::veg[position()=1].@id.toString()

    veg[position()=1] 告诉 XPath 您希望 veg 节点位于第一个位置。 我刚刚完成了您的初始 xpath 表达式。

    【讨论】:

    • 我不熟悉位置调用。那是 E4X 吗?
    • position() = 1 是 XPath,而不是 E4X。
    猜你喜欢
    • 2010-10-29
    • 2011-12-26
    • 1970-01-01
    • 2011-11-26
    • 2023-03-16
    • 1970-01-01
    • 2023-03-26
    • 2018-08-08
    • 1970-01-01
    相关资源
    最近更新 更多