вывод xslt с некоторыми недопустимыми именами тегов элементов - PullRequest
2 голосов
/ 16 января 2012

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

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

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

input 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>

Ответы [ 3 ]

2 голосов
/ 16 января 2012

Простая модификация (изменить < на &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 или простой текст .

1 голос
/ 16 января 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.

0 голосов
/ 16 января 2012

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

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