【问题标题】:xslt output with some invalid element tag names带有一些无效元素标记名称的 xslt 输出
【发布时间】:2012-02-11 07:54:14
【问题描述】:

我可以生成以下输出作为 xsl 文件的转换输出吗?

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

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

【问题讨论】:

    标签: xml xslt transform


    【解决方案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 内容的好选择。

    【讨论】:

    • XSLT 可以有效且非常方便地用于生成非 XML 输出——无论是 HTML 还是纯文本
    【解决方案2】:

    简单修改(将&amp;lt;改为&amp;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 还是纯文本

    【讨论】:

      【解决方案3】:

      另一个选项,因为您正在生成与 XML 有一些相似之处的输出格式,所以是生成有效的 XML 输出,然后对其进行后处理。例如,您可以输出 &lt;_123&gt; 代替 &lt;123&gt;,然后使用 sed 或类似的方法去掉下划线。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2010-10-09
        • 2011-04-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-06-29
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多