XSL:for-each用变音符号选择一个字符串

时间:2011-11-17 10:48:02

标签: xml xslt diacritics

我有以下XML:

<FeatureGroup FeatureGroup="Bundesländer">
    <Feature>
        <FeatureValue>
            <Value LanguageCode="fr">Brandenburg</Value>
            <Value LanguageCode="de">Brandenburg</Value>
            <Value LanguageCode="en">Brandenburg</Value>
        </FeatureValue>
    </Feature>
</FeatureGroup>

我想让它被xsl转换,但我无法选择FeatureGroup-Value“Bundesländer”。这是xsl:

<field name="federalState">
    <xsl:for-each select="FeatureGroups/FeatureGroup[FeatureGroup = 'Bundesländer']">
        <xsl:for-each select="Feature/FeatureValue/Value[@LanguageCode= 'de']">
            <xsl:value-of select="." />
        </xsl:for-each>
    </xsl:for-each>
</field>

如何选择带有变音符号的属性值?

3 个答案:

答案 0 :(得分:3)

XML和XPath完全支持Unicode,因此选择任何Unicode字符都不是问题,您只需要确保您的路径选择带有@的属性节点,即将<xsl:for-each select="FeatureGroups/FeatureGroup[FeatureGroup = 'Bundesländer']">替换为{{ 1}}。

答案 1 :(得分:1)

如果您在以正确的编码方式保存文件时遇到问题(如Sjoerd的评论中所述),您可以随时使用 “变音实体”(与HTML中相同):

  

ä=&amp; auml;

     

Bundesländer= Bundesl&amp; auml; nder

Here你找到了一份完整的清单。

答案 2 :(得分:1)

事实证明这不是你的问题,但理论上可能的是,有一个重音字母的两个Unicode表示:一个作为单个Unicode代码点(组合形式),一个作为两个Unicode代码点(分解形式) )。在XPath 1.0中,他们不会比较平等。在XPath 2.0中,它们可能会也可能不会相等,具体取决于默认的排序规则,这取决于处理器。

我将这个问题描述为理论问题,因为我从未真正看到它在实践中出现过。我认为这是因为大多数工具都会产生组合形式的字符,除非你不顾一切地获得分解形式。