XSLT / XML: преобразовать апостроф в конкретную строку сущности - PullRequest
4 голосов
/ 03 мая 2011

Я бы хотел иметь возможность преобразовать апостроф в строку ' с помощью XSLT. У меня есть следующий XML

<OrgName>King's College</OrgName>

Я бы хотел вывести следующее:

<OrgName>King&apos;s College</OrgName>

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

Я также попробовал функцию замены, но я не уверен, что я могу сделать, чтобы убедиться, что полная строка действительно появляется в выходном файле?

<xsl:value-of select='replace(OrgName,"&amp;apos;","&amp;apos;")' />

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

Ответы [ 2 ]

3 голосов
/ 03 мая 2011

Использование карты символов так же просто, как это :

<xsl:stylesheet version="2.0"
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    xmlns:xs="http://www.w3.org/2001/XMLSchema">
    <xsl:output omit-xml-declaration="yes" indent="yes" use-character-maps="mApos"/>

    <xsl:character-map name="mApos">
     <xsl:output-character character="&apos;" string="&amp;apos;"/>
    </xsl:character-map>

 <xsl:template match="node()|@*">
     <xsl:copy>
       <xsl:apply-templates select="node()|@*"/>
     </xsl:copy>
 </xsl:template>

 <xsl:template match="text()">
  <xsl:copy-of select="." />
 </xsl:template>
</xsl:stylesheet>

, когда это преобразование применяется кпредоставленный XML-документ:

<OrgName>King's College</OrgName>

желаемый, правильный результат:

<OrgName>King&apos;s College</OrgName>
0 голосов
/ 03 мая 2011

Это только частичный ответ:

Для замены символа ' вы можете использовать следующее:

<xsl:value-of select="replace(xs:string(str), 
                              codepoints-to-string(39), 
                              '&amp;apos;')"/>

, для которого требуется XSLT / XPath 2.0. Пояснение codepoints-to-string возвращает строку из последовательности кодов, а 39 соответствует символу ' '

Для выполнения этой замены на каждом узле вашего XML ... У меня нет решения на данный момент: подумаю об этом.

В любом случае, я надеюсь, что это поможет.

...