xslt输出带有一些无效的元素标记名称

时间:2012-01-16 10:48:51

标签: xml xslt transform

我可以将以下输出产生为xsl文件的转换输出。

需要输出(没有顶部标签,标签名称以数字开头)。由于它是无效标记,我尝试将输出方法设置为“text”

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

3 个答案:

答案 0 :(得分:2)

一个简单的修改(将<更改为&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 :(得分:1)

您可以使用标记字符创建文本节点,例如

<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的好选择。

答案 2 :(得分:0)

另一种选择,因为您生成的输出格式与XML有一些相似之处,那就是生成有效的XML输出,然后对其进行后处理。例如,您可以输出<_123>代替<123>,然后使用sed或类似方法删除下划线。