Ссылки на сущности XHML проглатываются XSLT - PullRequest
1 голос
/ 08 марта 2012

Я преобразую файл XHTML в XML. У меня проблемы с тем, что все ссылки на сущности XHML проглатываются в процессе, то есть такие сущности, как & copy; исчезают на выходе.

Мой код выглядит следующим образом:

<?xml version="1.0" encoding="utf-8"?>

<xsl:output method="xml" indent="yes"/>

  <xsl:template match="h1|h2|h3|h4|h5|h6|h7|h8|h9">
    <heading>
      <xsl:attribute name="name">
        <xsl:value-of select="name(.)" />
      </xsl:attribute>
      <xsl:attribute name="content">
        <xsl:value-of select="." />
      </xsl:attribute>

    </heading>
  </xsl:template>

    <xsl:template match="/html/body">
      <mapping>
        <xsl:apply-templates select="h1|h2|h3|h4|h5|h6|h7|h8|h9" />        
      </mapping>
    </xsl:template>
</xsl:stylesheet>

На выходе любые ссылки на сущности исчезают. Я попытался добавить определения сущностей в мой XSL ... не повезло.

Есть предложения?

Anton

Ответы [ 2 ]

2 голосов
/ 08 марта 2012

Для ссылок на сущности требуется DTD. Убедитесь, что исходный документ содержит DTD, и что вы не отключаете разрешение объекта.

Вы хотите, чтобы &copy; на входе стало © в выходном документе. Вам не нужны ссылки на сущности в выходном документе.

1 голос
/ 09 марта 2012

Все сущности раскрываются синтаксическим анализатором XML (концептуально) до запуска XSLT, XSLt не знает, что ссылки на сущности использовались, поэтому не может их сохранить. Если вы не хотите, чтобы символы, отличные от ascii, отображались в виде символов, то самое простое решение - указать кодировку, например

<xsl:output encoding="US-ASCII"/>

тогда любые символы, отличные от ascii, будут закодированы как десятичные или шестнадцатеричные числовые ссылки, так что авторское право будет иметь вид &#169;, а не © (при условии, что ваш вывод фактически сериализован XSLT).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...