带有一些无效元素标记名称的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> 

一个简单的修改(变化<&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或只是简单的文本

+0

很棒.......... – Suresh 2012-01-16 13:24:08

+0

@Maneesh:不客气。 – 2012-01-16 13:32:52

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

<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或类似命令删除下划线。