【问题标题】:XSL finding and transforming attributes to elementsXSL 查找属性并将其转换为元素
【发布时间】:2014-07-11 14:19:15
【问题描述】:

我有一个 XML 文件,其中包含属性内的数据,只是通用元素中的一个属性。

<main>
  <tag aaa="p1"/>
  <tag aaa="p2"/>
  <tag bbb="p3"/>
</main>

我想使用 XSL 将属性更改为元素,所以在这个例子中我会得到以下内容:

<main>
  <aaa>p1</aaa>
  <aaa>p2</aaa>
  <bbb>p3</bbb>
</main>

我事先不知道属性名;我想为任何此类属性名称一般地执行此操作。
结构的其余部分是不变的——一个元素中的一个属性。

我怎样才能捕捉和转换所有这些属性?

【问题讨论】:

  • 你有没有尝试过?如果是,请显示您的 XSLT 代码。如果没有,为什么不呢?
  • 这是 XSLT 的一个简单(可能)部分,我不知道该怎么做。我对正则表达式(如 aaa|bbb)和文本插入创建标签有一个想法,但我认为它不会起作用
  • 这不仅简单,而且很基础。去吧! -1,直到您尝试并提出特定的技术问题。这是许多在线 xsl 测试页面的 google-ing:google.com/search?q=run+xsl+online&oq=run+xsl+online
  • @Denis 这里有一个提示。创建一个&lt;xsl:template&gt;,创造性地使用&lt;xsl:element&gt;@*[1]
  • 而且大部分都翻译成任意标签,但没有指定。我还在寻找

标签: xml xslt


【解决方案1】:

更新:为了让它在通用 + 嵌套结构中工作(并假设有一个固定的根元素),从 identity 开始并处理每个元素的属性:

<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="*[ancestor::*]">
      <xsl:for-each select="attribute::*">
         <xsl:element name="{local-name()}">
            <xsl:value-of select="."></xsl:value-of>
         </xsl:element>
      </xsl:for-each>
      <xsl:apply-templates select="node()" />
   </xsl:template>
</xsl:stylesheet>

变换:

<main>
   <tag aaa="p1">
      <nestedtag a1="xx" a2="yy"></nestedtag>
   </tag>
   <moretag aaa="p2"/>
   <anothertag bbb="p3"/>
</main>

收件人:

<main>
   <aaa>p1</aaa>
      <a1>xx</a1><a2>yy</a2>
   <aaa>p2</aaa>
   <bbb>p3</bbb>
</main>

【讨论】:

  • @Denis 我已经更新以更通用+嵌套的方式解决这个问题?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-08-13
  • 1970-01-01
  • 2020-02-14
  • 2017-06-17
  • 1970-01-01
  • 2015-02-13
  • 2012-04-05
相关资源
最近更新 更多