0

XSLT には 2 つのソースがあり、ターゲットにマップする必要があります。ソースと目的の出力を以下に示します。最初のソース 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 に答える