首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >将某些子节点下移到新的子节点级别

将某些子节点下移到新的子节点级别
EN

Stack Overflow用户
提问于 2010-09-03 08:25:42
回答 1查看 758关注 0票数 3

我发现了关于将节点向上移动到父节点的其他问题,但我错过了将它们向下移动到新创建的节点中的技巧。

给定:

代码语言:javascript
运行
复制
<Villain>
  <Name>Dr Evil</Name>
  <Age>49</Age>
  <Like>Money</Like>
  <Like>Sharks</Like>
  <Like>Lasers</Like>
</Villain>

我正在尝试使用XSLT将其转换为:

代码语言:javascript
运行
复制
<Villain>
  <Name>Dr Evil</Name>
  <Age>49</Age>
  <Likes>
    <Like>Money</Like>
    <Like>Sharks</Like>
    <Like>Lasers</Like>
  </Likes>
</Villain>

换句话说,插入一个新的子节点,并移动它下面所有名为"Like“的子节点。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2010-09-03 09:03:46

此转换

代码语言:javascript
运行
复制
<xsl:stylesheet version="1.0"
 xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
 <xsl:output omit-xml-declaration="yes" indent="yes"/>
 <xsl:strip-space elements="*"/>

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

  <xsl:template match="Like[1]">
   <Likes>
    <xsl:apply-templates select="../Like" mode="copy"/>
   </Likes>
  </xsl:template>

   <xsl:template match="*" mode="copy">
    <xsl:call-template name="identity"/>
   </xsl:template>
   <xsl:template match="Like"/>
 </xsl:stylesheet>

在所提供的XML文档上应用时的

代码语言:javascript
运行
复制
<Villain>
  <Name>Dr Evil</Name>
  <Age>49</Age>
  <Like>Money</Like>
  <Like>Sharks</Like>
  <Like>Lasers</Like>
</Villain>

生成所需的、正确的结果

代码语言:javascript
运行
复制
<Villain>
   <Name>Dr Evil</Name>
   <Age>49</Age>
   <Likes>
      <Like>Money</Like>
      <Like>Sharks</Like>
      <Like>Lasers</Like>
   </Likes>
</Villain>

注意到

使用和覆盖 identity rule.

  • The use of modes以指定稍有不同的处理。
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3632244

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档