【问题标题】:Renaming node in XML在 XML 中重命名节点
【发布时间】:2015-02-11 19:25:05
【问题描述】:

我有一个非常大的 XML 文档正在由 XSLT 处理。除了在标头中添加安全令牌外,我还使用apply-templates 将消息按原样传递到后端。我什至没有解析消息。 但是现在,我必须重命名消息正文中存在的一个节点元素。

谁能告诉我如何在不破坏apply-templates的情况下实现这一目标?

【问题讨论】:

    标签: xml xslt


    【解决方案1】:

    由于您没有提供示例输入,就像 XSLT 之后的建议一样:

    <?xml version="1.0" encoding="UTF-8" ?>
    <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
    <xsl:output method="xml" encoding="UTF-8" indent="yes" />
     <xsl:strip-space elements="*"/>
      <xsl:template match="/">
         <xsl:apply-templates/>
      </xsl:template>
      <xsl:template match="@*|node()">
        <xsl:copy>
          <xsl:apply-templates select="@*|node()"/>
        </xsl:copy>
      </xsl:template>
      <xsl:template match="rename">
        <new>
          <xsl:apply-templates select="@*|node()"/>
        </new>
      </xsl:template>
    </xsl:stylesheet>
    

    当应用于此示例输入 XML 时

    <?xml version="1.0" encoding="UTF-8"?>
    <root>
     <keep>Text</keep>
     <keep>Text</keep>
     <keep>Text</keep>
     <rename>Text</rename>
    </root>
    

    产生输出

    <?xml version="1.0" encoding="UTF-8"?>
    <root>
      <keep>Text</keep>
      <keep>Text</keep>
      <keep>Text</keep>
      <new>Text</new>
    </root>
    

    因此,根据您要重命名的节点,您可以将其与单独的模板匹配

    <xsl:template match="rename">
    

    为元素编写新名称并应用模板来编写内容

    <new>
      <xsl:apply-templates select="@*|node()"/>
    </new>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-01-11
      • 2011-09-15
      • 2016-05-30
      • 2011-11-12
      • 2015-05-06
      相关资源
      最近更新 更多