0

我有一个 XML,在那个 XML 中我有一个元素,它本身有几个元素,现在我想要的是复制每个元素并更改标签名称。

XML结构:

<mothertag>
     <atag>
        asdfasdfa
     </atag>

     <storybody>
        <p>sometext here<URI ref="http://google.com" /> some more text</p>
     </storybody>

</mothertag>
  1. 我想改名<storybody><body>
  2. 其他一切都应该保持原样并将其更改<URI><a>

我为文档的其余部分所做的是定义模板并一一应用。现在我遇到了这个需要复制的,因为它几乎没有更改并且名称已更改。

4

2 回答 2

0

<storybody>要在 XSLT 中做到这一点,您只需要一个基本的身份转换,元素除外。

像这样的东西:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

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

  <xsl:template match="storybody">
    <body>
      <xsl:apply-templates select="@*|node()"/>
    </body>
  </xsl:template>

</xsl:stylesheet>

编辑

我已阅读您的评论,“我不想使用身份转换。而是我需要在文档中的一个元素上使用身份转换”,并且不清楚您需要什么。也许您对文档的其余部分进行了转换,但在使用此元素时遇到了问题?在这种情况下,除了您已经编写的内容之外,您应该只使用我的答案中的第二个模板。

您的消息的第二部分在标记中部分丢失了,但现在已修复,我忽略了它。要将<URI>元素也更改为 an <a>,您应该添加另一个模板。假设你想把原来的ref属性改成href,两者加起来是这样的

<xsl:template match="storybody">
  <body>
    <xsl:apply-templates select="@*|node()"/>
  </body>
</xsl:template>

<xsl:template match="storybody//URI">
  <a>
    <xsl:attribute name="href">
      <xsl:value-of select="@ref" />
    </xsl:attribute>
  </a>
</xsl:template>

如果您的意图与此不同,请澄清,我们将进一步帮助您。

于 2012-05-10T15:39:01.683 回答
0

如果没有所需结果 XML 的示例,目前尚不清楚您要尝试做什么 Touseef,但是....

如果您需要丢弃大部分输入文档并只保留一个标签,那么此模式可能会有所帮助:

 <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

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

   <xsl:template match="storybody">
       <xsl:copy-of select="."/>
   </xsl:template>

 </xsl:stylesheet>

我在打字时不在一台带有 XSLT 引擎的机器前,所以我没有对此进行测试。但我们的想法是将所有内容与第一个模板匹配,并简单地忽略它,除了我们简单地复制到输出文档的 storybody 元素。

如果这没有帮助,那么我敦促您提供一个示例所需的结果 XML 文档,并明确说明您希望应用的规则

于 2012-05-10T18:05:16.853 回答