私は XSLT の初心者です。私のソース XML:
<Request>
<Documents>
<Doc Type="A">123</Doc>
<Doc Type="C">345</Doc>
</Documents>
</Request>
私の応答 XML:
<Response>
<RequestedDoc>
<Doc Type="A">123</Doc>
<Doc Type="C">345</Doc>
</RequestedDoc>
<Result>
<Document>
<Id>A123</Id>
<Name>Doc1</Name>
</Document>
<Document>
<Id>E143</Id>
<Name>Doc2</Name>
</Document>
<Document>
<Id>C345</Id>
<Name>Doc3</Name>
</Document>
<Document>
<Id>D153</Id>
<Name>Doc4</Name>
</Document>
</Result>
</Response>
Result
タグを使用してタグをフィルタリングする必要がありますRequestedDoc
。XSLT の下で試してみましたが、最初の結果しか返されません。
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:output method="xml" indent="yes" />
<xsl:variable name="requestedDoc" select="//RequestedDoc/Doc"/>
<xsl:template match="Response">
<xsl:element name="FilterResult">
<xsl:apply-templates select="//Result/Document[contains(Id,$requestedDoc)]"/>
</xsl:element>
</xsl:template>
<xsl:template match="Document">
<xsl:element name="Name">
<xsl:value-of select="Name"/>
</xsl:element>
</xsl:template>
</xsl:stylesheet>
しかし、この XSLT は常に first のデータを返しますDoc A123
。
<FilterResult>
<Name>Doc1</Name>
</FilterResult>
期待される結果は
<FilterResult>
<Name>Doc1</Name>
<Name>Doc3</Name>
</FilterResult>
助けてください。