带有一些无效元素标记名称的xslt输出
问题描述:
可以生成下面的输出作为xsl文件的变换输出。带有一些无效元素标记名称的xslt输出
需要输出(没有顶部标签和标签名称以数字开头)。由于这是一个无效的标签,我尝试设置输出方法为“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>
答
一个简单的修改(变化<
到<
):
<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或只是简单的文本。
答
您可以使用标记字符创建文本节点,例如
<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
XSLT *可*被有效且非常方便地用于生成非XML输出 - 无论是HTML还是纯文本 – 2012-01-16 12:53:22
答
另一种选择是,由于您生成的输出格式与XML有某些相似之处,因此会生成有效的XML输出并对其进行后处理。例如,您可以输出<_123>
代替<123>
,然后使用sed或类似命令删除下划线。
很棒.......... – Suresh 2012-01-16 13:24:08
@Maneesh:不客气。 – 2012-01-16 13:32:52