0

我正在通过 XSLT 进行 XML 到 XML 的转换。

我想从元素中提取属性值并将其作为属性分配给新元素。

源 XML:

      <content>
        <component>
      <aaa>HI
           <strong>[a_b_c]</strong>
              : More Information Needed
            <strong>[d_e_f]</strong>XXX
      </aaa>
     </component>
     <content>

目标 XML:

    <ddd>hi<dv name='a_b_c'/>: More Information Needed <dv name='d_e_f'/> XXX

    </ddd>

任何人都可以建议如何通过 XSLT 做到这一点。

先感谢您。

4

1 回答 1

0

XSLT 1.0

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:output indent="yes"/>
  <xsl:strip-space elements="*"/>

  <xsl:template match="aaa">
    <ddd>
      <xsl:value-of select="substring-before(.,'[')"/>
      <dv name="{substring-before(substring-after(.,'['),']')}"/>
    </ddd>
  </xsl:template>

</xsl:stylesheet>

或者

XSLT 2.0

<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:output indent="yes"/>
  <xsl:strip-space elements="*"/>

  <xsl:template match="aaa">
    <ddd>
      <xsl:value-of select="tokenize(.,'\[')[1]"/>
      <dv name="{tokenize(tokenize(.,'\[')[2],'\]')[1]}"/>
    </ddd>
  </xsl:template>

</xsl:stylesheet>

编辑

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:output indent="yes"/>
  <xsl:strip-space elements="*"/>

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

  <xsl:template match="aaa">
    <ddd>
      <xsl:apply-templates select="node()|@*"/>
    </ddd>
  </xsl:template>

  <xsl:template match="content|component">
    <xsl:apply-templates/>
  </xsl:template>

  <xsl:template match="strong">
    <dv name="{normalize-space(.)}"/>
  </xsl:template>

</xsl:stylesheet>
于 2012-03-16T07:34:12.053 回答