XML输入:
<?xml version="1.0" encoding="UTF-8"?>
<root>
<output>
<calls>
<call>
<parameters>
<parameter name="id">CTL-000002</parameter>
</parameters>
<Results>
<ex id="1">
<column name="CFGCapacity">9500.0000000</column>
<column name="CFGCode">CTL-3819</column>
<column name="CPCode">CTL-3819-01</column>
<column name="CPCapacity">2700</column>
<column name="unit">gallon</column>
</ex>
<ex id="2">
<column name="CFGCapacity">52120.0000000</column>
<column name="CFGCode">CTL-3819</column>
<column name="CPCode">CTL-3819-01</column>
<column name="CPCapacity">22950</column>
<column name="unit">pound</column>
</ex>
<ex id="3">
<column name="CFGCapacity">9500.0000000</column>
<column name="CFGCode">CTL-3819</column>
<column name="CPCode">CTL-3819-02</column>
<column name="CPCapacity">1700</column>
<column name="unit">gallon</column>
</ex>
</Results>
</call>
</calls>
</output>
<plant>
<id>CTL-000002</id>
<plant_tag>0</plant_tag>
</plant>
</root>
XSL:
<xsl:template match="@* | node()">
<root>
<xsl:for-each select="//plant">
<xsl:choose>
<xsl:when test="plant_tag='0'">
<cfgs>
<cfg>
<id>
<xsl:value-of select="//root/output/calls/call/parameters[parameter[@name='id'] = ./id]/../../Results/ex/column[@name='CFGCode']"/>
</id>
</cfg>
</cfgs>
<xsl:copy-of select="."/>
</xsl:when>
<xsl:otherwise>
<!--smthing else-->
</xsl:otherwise>
</xsl:choose>
</xsl:for-each>
</root>
</xsl:template>
</xsl:stylesheet>
我不确定我做错了什么 基本上,我想在cfg / id标签中插入名称为&#39; CFGCode&#39;的列中的值。诀窍是我可能有不同的电话&#39;使用不同的参数,所以我想确保我使用正确的值填充ID标记,这就是我试图将工厂/ ID与参数[name =&#39; id&#39;]匹配的原因来自电话。 如果这些值匹配,则从CFGCode中选择值。
最终目标是,我有多种植物&#39;标签,具有不同的信息,我需要将工厂ID与来自&#39;呼叫的工厂ID相匹配。为了从我的通话结果中选择一些信息(这些是查询的一些结果)。
谢谢!
编辑:
预期产出:
<root>
<plant>
<cfgs>
<cfg>
<id>CTL-3819</id>
</cfg>
</cfgs>
<id>CTL-000002</id>
<plant_tag>0</plant_tag>
</plant>
</root>
答案 0 :(得分:1)
你想要的表达是......
<xsl:value-of select="//root/output/calls/call/parameters[parameter[@name='id'] = current()/id]/../Results/ex/column[@name='CFGCode']"/>
注意使用current()/id
而不是./id
,因为current()
指的是plant
的当前节点,而xpath条件中的.
指的是parameter
..
节点。
另请注意,您只需../..
而不是<xsl:value-of select="//root/output/calls/call[parameters/parameter[@name='id'] = current()/id]/Results/ex/column[@name='CFGCode']"/>
。
但是,您可以将表达式简化为...
<xsl:key name="calls" match="call" use="parameters/parameter[@name='id']" />
或者更好地定义一个像这样的键......
<xsl:value-of select="key('calls', id)/Results/ex/column[@name='CFGCode']"/>
然后你可以这样做......
OWA_UTIL.REDIRECT_URL