【问题标题】:XML transformation with XSL使用 XSL 进行 XML 转换
【发布时间】:2012-08-05 12:54:58
【问题描述】:

我想用 XSLT 将 XML 文件传输到其他 XML。我想做转换,因为 XML 文件不是纯树状结构的文档。

这是我之前的文件:

<uglyStartTag></uglyStartTag>
    <name>content</name>
<uglyEndTag></uglyEndTag>

<uglyStartTag/>
    <name>content</name>
<uglyEndTag/>

这是我之后的文件:

<beautyTag>
    <name>content</name>
</beautyTag>

我该怎么做?我不熟悉 XSLT,所以我会感谢任何建议。

【问题讨论】:

  • 您知道吗,您所拥有的不是格式良好的 xml。这甚至可能导致 xslt 根本无法工作。
  • XML file isn't pure tree-structured 是不是很矛盾?
  • XML 文件是用 XML 标准正确形成的,但是为了存储一种数据类型,我有两个标签:打开 uglyStartTag 和结束 uglyEndTag。应该有一个标签,比如beautyTag
  • @Kowser,如您所见,数据永远不会存储在&lt;uglyStartTag&gt;&lt;/uglyStartTag&gt;&lt;uglyEndTag&gt;&lt;/uglyEndTag&gt; 中。例如,uglyStartTag 不可能存储为:&lt;uglyEndTag&gt;**some data**&lt;/uglyEndTag&gt;。所以它不是纯粹的树结构标准
  • 重点是第一个例子是not有效的XML。

标签: java xml xslt saxon xalan


【解决方案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()[preceding-sibling::uglyStartTag
            and
              following-sibling::uglyEndTag
              ][1]">
      <beautyTag>
        <xsl:copy-of select=
         "../node()[preceding-sibling::uglyStartTag
                  and
                    following-sibling::uglyEndTag
                   ]
         "/>
      </beautyTag>
     </xsl:template>
</xsl:stylesheet>

应用于此 XML 文档时(由 OP 在评论中提供):

<t>
    <uglyStartTag />
    <name>dgsdgsdgsdg</name>
    <uglyEndTag />
</t>

产生想要的正确结果:

<beautyTag>
   <name>dgsdgsdgsdg</name>
</beautyTag>

【讨论】:

  • 当我尝试将 XSLT 与 &lt;t&gt;&lt;uglyStartTag /&gt; &lt;name&gt;dgsdgsdgsdg&lt;/name&gt; &lt;uglyEndTag /&gt;&lt;/t&gt; 一起使用时,您能告诉我有什么问题吗?输出为&lt;beautyTag&gt;dgsdgsdgsdg&lt;/beautyTag&gt;。我想要&lt;beautyTag&gt;&lt;name&gt;dgsdgsdgsdg&lt;/name&gt;&lt;/beautyTag&gt;
  • @bontade,您没有在问题中指定此类要求。 “内容”只是一个字符串。请编辑和更新问题。我会尽快更新我的答案。
  • @bontade,我编辑了这个答案,现在它以所需的方式处理您的新 XML 文档。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-04-15
  • 2013-02-05
  • 2014-06-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多