вывод xslt с некоторыми недопустимыми именами тегов элементов

Могу ли я создать приведенный ниже вывод в качестве вывода преобразования файла xsl.

Требуется вывод (нет верхнего тега, а имена тегов начинаются с цифр). Поскольку это недопустимый тег, я попытался установить метод вывода на «текст».

<134>my</134>
<114>xml</114>
<567>notgood</567>
<789>me</789>

ввод xml

<Root>
<a>me</a>
</Root>

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

<?xml version="1.0"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:output method="text" indent="no"/>
  <xsl:template match="/">
    <xsl:variable name="output">
      <Root>
        <134>my</134>
        <114>xml</114>
        <567>notgood</567>
        <789>
          <xsl:value-of select="/Root/a"/>
        </789>
      </Root>
    </xsl:variable>
    <xsl:copy-of select="$output/Root" />
  </xsl:template>
</xsl:stylesheet>

person Suresh    schedule 16.01.2012    source источник


Ответы (3)


Простое изменение (замените < на &lt;):

<xsl:stylesheet version="1.0"
 xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output method="text" indent="no"/>
    <xsl:template match="/">
        <xsl:variable name="output">
            <Root>
                &lt;134>my&lt;134>
                &lt;114>xml&lt;114>
                &lt;567>notgood&lt;567>
                &lt;789><xsl:value-of select="/Root/a"/>&lt;789>
            </Root>
        </xsl:variable>
        <xsl:copy-of select="$output" />
    </xsl:template>
</xsl:stylesheet>

При применении к предоставленному XML-документу:

<Root>
    <a>me</a>
</Root>

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

            <134>my<134>
            <114>xml<114>
            <567>notgood<567>
            <789>me<789>

XSLT можно эффективно и достаточно удобно использовать для создания выходных данных, отличных от XML, будь то HTML или обычный текст.

person Dimitre Novatchev    schedule 16.01.2012

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

<xsl:output method="text"/>

<xsl:template match="/">
  <xsl:text><![CDATA[<789>]]></xsl:text>
  <xsl:value-of select="/Root/a"/>
  <xsl:text><![CDATA[</789>]]></xsl:text>
</xsl:template>

но я не уверен, что XSLT или любой другой XML-инструмент — хороший выбор для создания чего-то, что не является XML.

person Martin Honnen    schedule 16.01.2012
comment
XSLT может эффективно и довольно удобно использоваться для создания выходных данных, отличных от XML, будь то HTML или обычный текст. - person Dimitre Novatchev; 16.01.2012

Другим вариантом, поскольку вы создаете формат вывода, который имеет некоторое сходство с XML, может быть создание корректного вывода XML с последующей его обработкой. Например, вы можете вывести <_123> вместо <123>, а затем избавиться от подчеркивания, используя sed или подобное.

person Michael Kay    schedule 16.01.2012