XSL: для каждого выберите строку с умлаутами - PullRequest
2 голосов
/ 17 ноября 2011

У меня есть следующий 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 ]

3 голосов
/ 17 ноября 2011

Хорошо, XML и XPath полностью поддерживают Unicode, поэтому выбор любого символа Unicode не является проблемой, вам просто нужно убедиться, что ваш путь выбирает узел атрибута с @, то есть замените <xsl:for-each select="FeatureGroups/FeatureGroup[FeatureGroup = 'Bundesländer']"> на <xsl:for-each select="FeatureGroups/FeatureGroup[@FeatureGroup = 'Bundesländer']">.

1 голос
/ 20 ноября 2011

Оказывается, это не ваша проблема, но одна теоретическая возможность состоит в том, что есть два представления Unicode с акцентированной буквой: одно как одна кодовая точка Unicode (составная форма) и одно как две кодовые точки Unicode (разложенная форма). В XPath 1.0 они не будут сравниваться равными. В XPath 2.0 они могут сравниваться или не совпадать в зависимости от параметров сортировки по умолчанию, который зависит от процессора.

Я описываю эту проблему как теоретическую, потому что я никогда не видел, чтобы она возникла на практике. Я думаю, это потому, что большинство инструментов генерируют составную форму символов, если вы не сделаете все возможное, чтобы получить разложенную форму.

1 голос
/ 17 ноября 2011

Если у вас есть проблемы с сохранением вашего файла в правильной кодировке (как предложено в комментарии Sjoerd), вы всегда можете использовать «Умлаут сущности» (так же, как в HTML):

ä = & auml;

Bundesländer = Bundesl & auml; nder

Здесь вы найдете полный список.

...