0

我有 2 个 XSLT 源,需要映射到目标。下面给出了源和所需的输出。第一个源 XML 位于需要迭代以获取值的集合中。

Input Payload:

XML 1:

<ParticipentsCollection>
<Participents>
<Email>PM@y.com</Email>
<Role>PM</Role>
</Participents>
<Participents>
<Email>BM@y.com</Email>
<Role>BM</Role>
</Participents>
<Participents>
<Email>CM@y.com</Email>
<Role>CM</Role>
</Participents>
</ParticipentsCollection>

XML 2:

<Project>
<ID>1</ID>
<Name>XYZ</Name>
<Status>Req Gathering</Status>
</Project>

Desired Output:

<ProjectDetails>
<ID>1</ID>
<Name>XYZ</Name>
<Status>Req Gathering</Status>
<PM>PM@y.com</PM>
<BM>PM@y.com</BM>
<CM>>CM@y.com</CM>
</ProjectDetails>
4

1 回答 1

1

如果您使用的是 XSLT 1.0,请使用:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"  xmlns:exslt="http://exslt.org/common"
  xmlns:msxsl="urn:schemas-microsoft-com:xslt"
  exclude-result-prefixes="exslt msxsl">
  <xsl:output method="xml" indent="yes"/>
  <xsl:param name="Doc2"><xsl:copy><xsl:copy-of select="document('Untitled2.xml')/Project"></xsl:copy-of></xsl:copy></xsl:param>
  <xsl:template match="ParticipentsCollection">
    <ProjectDetails>
      <xsl:copy-of select="exslt:node-set($Doc2)/Project/*"/>
      <xsl:for-each select="Participents">
        <xsl:element name="{Role}"><xsl:value-of select="Email"/></xsl:element>
      </xsl:for-each>
    </ProjectDetails>
  </xsl:template>
</xsl:stylesheet>

如果 2.0 使用:

<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:output method="xml" indent="yes"/>
  <xsl:param name="Doc2"><xsl:copy><xsl:copy-of select="document('Untitled2.xml')/Project"></xsl:copy-of></xsl:copy></xsl:param>
  <xsl:template match="ParticipentsCollection">
    <ProjectDetails>
      <xsl:copy-of select="$Doc2/Project/*"/>
      <xsl:for-each select="Participents">
        <xsl:element name="{Role}"><xsl:value-of select="Email"/></xsl:element>
      </xsl:for-each>
    </ProjectDetails>
  </xsl:template>
  </xsl:stylesheet>

我在 XML1 上运行此 XSLT 并将 XML2 保存在 $Doc2 参数中以获取输出:

<ProjectDetails>
   <ID>1</ID>
   <Name>XYZ</Name>
   <Status>Req Gathering</Status>
   <PM>PM@y.com</PM>
   <BM>BM@y.com</BM>
   <CM>CM@y.com</CM>
</ProjectDetails>
于 2013-09-16T12:08:42.503 回答