我可以将以下输出产生为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>
答案 0 :(得分:2)
一个简单的修改(将<
更改为<
):
<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" />
</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或类似方法删除下划线。