需要有關 XSL 查找表的幫助。理想情況下,我希望它在 Saxon 9.5.1.6 上運行,但我發現的示例在 Saxon 6.5.5 上運行。
我需要使用查找表來查找相應的值。我的 XSL 中有一個查找表,其中包含 XML 中的鍵和我需要添加到輸出 XML 中的相應值。
我的輸入 XML 如下所示:
<?xml version='1.0' encoding='UTF-8'?>
<doc>
<obj>
<BO>
<OH>
<Code>01</Code>
<PC>C1</PC>
</OH>
<OH>
<Code>02</Code>
<PC>C2</PC>
</OH>
<OH>
<Code>03</Code>
<PC>C3</PC>
</OH>
<OH>
<Code>04</Code>
<PC>C4</PC>
</OH>
</BO>
</obj>
</doc>
期望的輸出 XML 應如下所示:
<doc>
<obj>
<OH>
<Code>01</Code>
<PC>C1</PC>
<RT>10</RT>
</OH>
<OH>
<Code>02</Code>
<PC>C2</PC>
<RT>5</RT>
</OH>
<OH>
<Code>03</Code>
<PC>C3</PC>
<RT>20</RT>
</OH>
<OH>
<Code>04</Code>
<PC>C4</PC>
<RT>40</RT>
</OH>
</obj>
</doc>
這是我的 XSL:
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0"
xmlns:lookup="lookup" xmlns:exsl="http://exslt.org/common" exclude-result-prefixes="lookup exsl">
<xsl:output method="xml" omit-xml-declaration="yes" indent="yes" encoding="utf-8" media-type="xml/plain" />
<xsl:strip-space elements="*" />
<xsl:template match="node() | @*">
<xsl:copy>
<xsl:apply-templates select="node() | @*" />
</xsl:copy>
</xsl:template>
<xsl:param name="value_to_lookup" select="PC"/>
<xsl:key name="lookup" match="row" use="@rt"/>
<xsl:variable name="lookup" >
<row PC="C1" rt="10"/>
<row PC="C2" rt="5"/>
<row PC="C3" rt="20"/>
<row PC="C3" rt="40"/>
</xsl:variable>
<!-- drop elements -->
<xsl:template match="BO">
<xsl:apply-templates />
</xsl:template>
<xsl:template match="OH">
<xsl:variable name="BPC" select="exsl:node-set($lookup)" />
<OH>
<Code>
<xsl:value-of select="Code"/>
</Code>
<PC>
<xsl:value-of select="PC"/>
</PC>
<RT>
<xsl:for-each select="$BPC">
<xsl:value-of select="key('lookup', $value_to_lookup)/@rt"/>
</xsl:for-each>
</RT>
</OH>
</xsl:template>
</xsl:stylesheet>
uj5u.com熱心網友回復:
試試這個方法?
XSLT 2.0
<xsl:stylesheet version="2.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
<xsl:key name="lookup" match="row" use="@PC"/>
<xsl:variable name="lookup" >
<row PC="C1" rt="10"/>
<row PC="C2" rt="5"/>
<row PC="C3" rt="20"/>
<row PC="C4" rt="40"/>
</xsl:variable>
<!-- identity transform -->
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
<!-- drop element -->
<xsl:template match="BO">
<xsl:apply-templates/>
</xsl:template>
<xsl:template match="PC">
<xsl:copy-of select="."/>
<RT>
<xsl:value-of select="key('lookup', ., $lookup)/@rt"/>
</RT>
</xsl:template>
</xsl:stylesheet>
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/492120.html
上一篇:無法獲取XML中的元素
