XSLT 简单转换

XSLT simple transforming

我有一个非常简单的任务,但我被困在这里。

所以,我有这样的 XML 文件:

<entries>
<entry>
    <field>field value</field>
</entry>
...
<entry>
    <field>field value</field>
</entry>

并且应该使用 XSLT 进行转换,如下所示:

<entries>
<entry field="field value">
...
<entry field="field value">
</entries>

你能帮我做个模板吗?非常感谢。

这可以通过以下 XSLT 完成:

<?xml version="1.0" encoding="UTF-8" ?>
<xsl:transform xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
    version="1.0">
<xsl:output method="xml" omit-xml-declaration="yes" encoding="UTF-8" 
    indent="yes" />
<xsl:strip-space elements="*"/>
  <xsl:template match="/">
    <xsl:apply-templates/>
  </xsl:template>
  <xsl:template match="@*|node()">
    <xsl:copy>
        <xsl:apply-templates select="@*|node()"/>
    </xsl:copy>
  </xsl:template>
  <xsl:template match="entry">
    <xsl:copy>
        <xsl:attribute name="field">
          <xsl:value-of select="field"/>
        </xsl:attribute> 
      <xsl:apply-templates/>
    </xsl:copy>
  </xsl:template>
  <xsl:template match="field"/>
</xsl:transform>

应用于示例输入时XML

<entries>
  <entry>
    <field>field value 1</field>
  </entry>
  <entry>
    <field>field value 2</field>
  </entry>
</entries>

生成以下输出:

<entries>
 <entry field="field value 1"/>
 <entry field="field value 2"/>
</entries>

模板匹配entry<xsl:template match="entry">

复制 entry 并添加 field field 节点的值作为属性:

<xsl:copy>
  <xsl:attribute name="field">
    <xsl:value-of select="field"/>
  </xsl:attribute> 
  <xsl:apply-templates/>
</xsl:copy>

并且模板匹配 field <xsl:template match="field"/> 为空并删除 field 节点。