【问题标题】:Renaming XML elements using value of attributes at nested level使用嵌套级别的属性值重命名 XML 元素
【发布时间】:2012-06-06 11:26:08
【问题描述】:

我有一个 xml 文档,其中包含带有属性的嵌套级别 <div> 元素。 我想通过属性名重命名 div。

【问题讨论】:

  • 请提供一个具体示例来说明您想要实现的目标 - 例如源 XML 文件的摘录和该摘录的所需输出。
  • 感谢您的帮助!,它工作
  • 接受对您有帮助的答案,在投票计数下打勾。

标签: c# xml xslt


【解决方案1】:

这种转变

<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()|@*">
     <xsl:copy>
       <xsl:apply-templates select="node()|@*"/>
     </xsl:copy>
 </xsl:template>

 <xsl:template match="div">
  <xsl:element name="{@class}">
    <xsl:apply-templates select="node()|@*"/>
  </xsl:element>
 </xsl:template>
</xsl:stylesheet>

应用于以下 XML 文档时

<html>
  <div class="animal">
     Animals:
     <div class="mammal">
       Mammals:
        <div class="dog">
          Dogs
        </div>
        <div class="cat">Cats</div>
    </div>
  </div>
</html>

产生想要的正确结果

<html>
   <animal class="animal">
      Animals:

      <mammal class="mammal">
         Mammals:

         <dog class="dog">
                      Dogs

         </dog>
         <cat class="cat">Cats</cat>
      </mammal>
   </animal>
</html>

解释

正确使用 identity rule 设计模式。

【讨论】:

  • 这会将&lt;div&gt; 元素重命名为class 属性的值。要求是“按属性名称重命名 div”。
  • @Borodin 你似乎很快就投了反对票!我认为 OP 意味着 一般 任何属性。所以我只选择了class 元素上可能存在的一个属性。我认为 HTML div 元素没有 name 属性。
  • 我没有对你投反对票。我将“属性名称”理解为“属性名称”。 OP需要澄清
  • @Borodin:同意 OP 的澄清是必要的。到那时,这个答案至少给出了如何解决这类任务的想法。
猜你喜欢
  • 2016-06-19
  • 2012-09-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-01-07
  • 2014-02-07
  • 2011-01-11
相关资源
最近更新 更多