XSLT の「キー」関数を使用して、値を抽出し、XML の特定の位置に追加しようとしています。しかし、私はそれを正しく理解していません。以下は、入力と XSLT です。
助けてください。
入力 XML:
<input xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xsi:noNamespaceSchemaLocation="nbA2.8.90.xsd">
<info>User Info </info>
<team>User Team </team>
<nodeA id="test">
<inodeAA> Sample </inodeAA>
<inodeAB> Samples </inodeAB>
</nodeA>
<nodeA id="test2">
<inodeAA> Sample </inodeAA>
<inodeAB> Samples </inodeAB>
</nodeA>
<ns3:output xmlns:ns3="http://mysample.org">
<ns3:reply id="test">
<ns3:pkey>55555</ns3:pkey>
<ns3:place>SampleLoc</ns3:place>
</ns3:reply>
<ns3:reply id="test2">
<ns3:pkey>55557</ns3:pkey>
<ns3:place>SampleLoc2</ns3:place>
</ns3:reply>
</ns3:output>
</input>
期待される出力:
<input xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xsi:noNamespaceSchemaLocation="nbA2.8.90.xsd">
<info>User Info </info>
<team>User Team </team>
<nodeA id="test">
<inodeAA> Sample </inodeAA>
<pkey>55555</pkey>
<inodeAB> Samples </inodeAB>
</nodeA>
<nodeA id="test2">
<inodeAA> Sample </inodeAA>
<pkey>55557</pkey>
<inodeAB> Samples </inodeAB>
</nodeA>
</input>
以下は私のXSLです:
<xsl:stylesheet version="2.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:ns3="http://mysample.org"
exclude-result-prefixes="soap xsl">
<xsl:output omit-xml-declaration="no" indent="yes" />
<xsl:key name="parKey" match="ns3:output/ns3:reply/ns3:pkey" use="/input/ns3:output/ns3:reply/@id"></xsl:key>
<xsl:template match="@*|node()">
<xsl:copy copy-namespaces="no">
<xsl:apply-templates select="@*|node()" />
</xsl:copy>
</xsl:template>
<xsl:template match="/input">
<xsl:variable name="output_186" select="ns3:output"/>
<xsl:copy>
<xsl:copy-of copy-namespaces="no" select="./@*" />
<xsl:copy-of select=" * except $output_186"></xsl:copy-of>
</xsl:copy>
</xsl:template>
<xsl:template match="/input//nodeA">
<xsl:copy>
<xsl:copy-of copy-namespaces="no" select="./@*" />
<pkey>
<xsl:copy-of select="key('parKey', @id)|." />
</pkey>
<xsl:copy-of copy-namespaces="no" select="node()" />
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
出力は次のとおりです。必須フィールドが表示されていません
<input xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xsi:noNamespaceSchemaLocation="nbA2.8.90.xsd" >
<info>User Info </info>
<team>User Team </team>
<nodeA id="test">
<inodeAA> Sample </inodeAA>
<inodeAB> Samples </inodeAB>
</nodeA>
<nodeA id="test2">
<inodeAA> Sample </inodeAA>
<inodeAB> Samples </inodeAB>
</nodeA>
</input>
正確に私が行方不明になっているところを助けてください。
ありがとう...