首页 > 解决方案 > XSLT 转换:将节点的内容移动到一个节点

问题描述

我有以下 XML:

<EAD:c>
  <EAD:accessrestrict type="aaa">
    <EAD:p>
      value1
    </EAD:p>
  </EAD:accessrestrict>
  <EAD:accessrestrict type="bbb">
    <EAD:p>
      value2
    </EAD:p>
  </EAD:accessrestrict>
</EAD:c>

有多个<EAD:c>节点,并非所有节点都必须具有<EAD:accessrestrict type="aaa"><EAD:accessrestrict type="bbb">

转换后的结果应该是:

<EAD:c>
  <EAD:accessrestrict>
    <EAD:p>
      value1; value2;
    </EAD:p>
  </EAD:accessrestrict>
</EAD:c>

我不知道该怎么做,非常感谢您的帮助!

标签: xslt

解决方案


你可以这样做:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    xmlns:EAD="http://www.somens.com"
    version="1.0">

  <xsl:output method="xml" indent="yes"/>

  <xsl:template match="/">
    <outputDoc>
      <xsl:apply-templates/>
    </outputDoc>
  </xsl:template>

  <xsl:template match="EAD:c">
      <xsl:copy>
        <EAD:accessrestrict>
          <EAD:p>
            <xsl:for-each select="EAD:accessrestrict/EAD:p">
              <xsl:value-of select="normalize-space(.)"/>
              <xsl:if test="position()!=last()"><xsl:text>; </xsl:text></xsl:if>
              <xsl:if test="position()=last()"><xsl:text>;</xsl:text></xsl:if>
            </xsl:for-each>
          </EAD:p>
        </EAD:accessrestrict>
      </xsl:copy>
  </xsl:template>

</xsl:stylesheet>

看到它在这里工作:https ://xsltfiddle.liberty-development.net/gVhDDz1


推荐阅读