我正在尝试使用 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>
请帮助我我到底在哪里失踪。
谢谢...