【发布时间】:2018-05-09 16:45:11
【问题描述】:
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 标记中插入名为“CFGCode”的列中的值。诀窍是我可能有不同的“调用”和不同的参数,所以我想确保我用正确的值填充 ID 标签,这就是为什么我试图将植物/ID 与参数 [name='id '] 从通话中。
如果这些值匹配,则从 CFGCode 中选择值。
最终目标是,我有多个“植物”标签,具有不同的信息,我需要将植物 ID 与“通话”中的植物 ID 匹配,以便从我的通话结果中选择一些信息(这些是查询的一些结果)。
谢谢!
编辑:
预期输出:
<root>
<plant>
<cfgs>
<cfg>
<id>CTL-3819</id>
</cfg>
</cfgs>
<id>CTL-000002</id>
<plant_tag>0</plant_tag>
</plant>
</root>
【问题讨论】:
-
您的预期输出是什么样的?
-
正如我所说,在 cfg/ID 标签中,我应该有来自 column[name='CFGCode'] 的值,因为 parameters/parameter[name='id'] 的值与植物/id。