有没有一种简单的方法来获取元素的隐含xml:lang值?

时间:2014-05-21 06:29:36

标签: xml xpath multilingual

根据W3C规范:

  

xml:lang指定的语言适用于指定它的元素(包括其属性的值),以及其内容中的所有元素,除非被另一个xml:lang实例覆盖。

如果我们查看以下示例,

<foo xml:lang="en">
    <bar>Some words!</bar>
    <bar xml:lang="fr">Different words!</bar>
    <bar xml:lang="fr">
        <buzz xml:lang="de">Other words!</bar>
        <buzz >Other words!</bar>
    </bar>
</foo>

foo且第一个bar元素为en,第二个和第三个bar元素为“fr”,而第一个buzz为“de” “,而第二个是”fr“。

是否有一种简单的方法可以使用XPath快速确定元素的继承@xml:lang值是多少?

1 个答案:

答案 0 :(得分:1)

是!

下面的XPath可以 用于从给定元素的上下文中查找xml:lang属性的正确值。

ancestor-or-self::*[attribute::xml:lang][1]/@xml:lang

每个阶段的描述部分都使用下划线标出 照顾,并打破了这个:

  1. 通过所有祖先跟随树回到根目录,并仅返回 具有@xml:lang属性的那些。

    ancestor-or-self::*[attribute::xml:lang][1]/@xml:lang
    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    
  2. 返回此列表是为了消除我们搜索的元素, 所以我们抓住第一个(或最接近的元素)。

    ancestor-or-self::*[attribute::xml:lang][1]/@xml:lang
                                            ^^^
    
  3. 让最近的元素设置为xml:lang,我们不仅仅是返回 其@xml:lang属性的值。

    ancestor-or-self::*[attribute::xml:lang][1]/@xml:lang
                                               ^^^^^^^^^^