我的数据是这样的:
<Source>
<input>
<plant>
YYYYY
</plant>
<group>
Georgia Power Co
</group>
<unit>
Wilmot IC 5
</unit>
<Status>
Operating
</Status>
<code>
56504
</code>
<change>
2
</change>
</input>
<input>
<plant>
XXXXX
</plant>
<group>
Detroit Edison Co
</group>
<unit>
Wilmot IC 5
</unit>
<Status>
Operating
</Status>
<code>
56504
</code>
<change>
0
</change>
</input>
<input>
<plant>
ZZZZZZ
</plant>
<group>
Detroit Edison Co
</group>
<unit>
Wilmot IC 4
</unit>
<Status>
Operating
</Status>
<code>
56504
</code>
<change>
2
</change>
</input>
</Source>
我想根据以下条件选择输入节点数据:
<change>
为2的输入数据应将<units>
与<change>
比较为0. 答案 0 :(得分:0)
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:template match="input">
<xsl:variable name="other" select="../input[change=0 and unit=current()/unit]"/>
<xsl:if test="$other">
<match>
<unit>
<xsl:value-of select="unit"/>
</unit>
<xsl:for-each select="*[name() != 'change']">
<xsl:variable name="name" select="name()"/>
<xsl:variable name="original" select="$other/*[name() = $name]"/>
<xsl:if test="not(current() = $original)">
<value>
<xsl:attribute name="name">
<xsl:value-of select="$name"/>
</xsl:attribute>
<two>
<xsl:value-of select="current()"/>
</two>
<zero>
<xsl:value-of select="$original"/>
</zero>
</value>
</xsl:if>
</xsl:for-each>
</match>
</xsl:if>
</xsl:template>
<xsl:template match="/Source">
<xsl:apply-templates select="input[change=2]"/>
</xsl:template>
</xsl:stylesheet>
返回
<match>
<unit>
Wilmot IC 5
</unit>
<value name="plant">
<two>
YYYYY
</two>
<zero>
XXXXX
</zero>
</value>
<value name="group">
<two>
Georgia Power Co
</two>
<zero>
Detroit Edison Co
</zero>
</value>
</match>
这似乎就是你要找的东西。