КАК заставить XSLT кодировать апострофы так, как это делается для цитат - PullRequest
1 голос
/ 18 октября 2011

во входном XML. У меня есть тег

<name>Sample " '</name>

в XSL. Я преобразую этот тег с помощью:

<xsl:variable name="productName" select="substring($elemXPath/name,1,50)"/>
<someTag someAttr="{$productName}"/>

Когда я запускаю XSLT, вывод:

<someTag someAttr="Sample &quot; '"/>

но я бы хотел получить

<someTag someAttr="Sample &quot; &apos;"/>

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

Я пытался кодировать апострофы во входном файле, но когда я поставил

<name>Sample &apos;</name>

во входной файл, тогда я получил

<someTag someAttr="Sample &amp;apos;"/>

вместо

<someTag someAttr="Sample &apos;"/>

Мой вопрос заключается в том, как заставить / настроить XSLT для кодирования апострофовкак это делается для цитат?

Ответы [ 2 ]

2 голосов
/ 18 октября 2011

В XSLT 1.0 .

нет способа управлять сериализацией до этого уровня.

В XSLT 2.0 используйте <xsl:character-map>, как в следующем примере :

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

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

 <xsl:template match="/">
     <someTag someAttr="Sample &quot; &apos;"   />
 </xsl:template>
</xsl:stylesheet>

Это приводит к желаемому результату :

<someTag someAttr="Sample &quot; &apos;"/>
1 голос
/ 18 октября 2011

В общем, вам не важно, какую из двух эквивалентных сериализаций ваших данных выберет процессор XSLT.Любой здравомыслящий потребитель данных будет относиться к ним одинаково;если это не так, вы должны исправить потребителя.

Однако по прагматическим причинам XSLT 1.0 обеспечивает отключение-вывод-выход, а XSLT 2.0 предоставляет карты символов, так что вы можете настроить вывод на этом уровне, если вам действительно нужно.

...