我有一个带有“Drivers”节点的XML,它可以有多个“Driver”节点作为子节点。 (/马达/驱动器/驱动器) 每个“驱动程序”都有一个子节点“事故”,其值可以是Y或N.
现在我有了一个xsl,可以使用Apache FOP将这个xml转换为PDF。 我有一个要求:如果任何“Driver”节点有Accident =“Y”,我想显示一个文本。即使有多个“Driver”节点的Accident =“Y”,我希望文本只出现一次。
如果我正在写一个xsl:for-each循环来遍历Driver节点并检查事故值,那么每次Accident = Y时都会出现文本。但是如果任何驱动程序的事故= Y,我希望文本只出现一次。
如果没有中断功能或更改变量功能的值,我该怎么做?
在运行时,xml可以在Drivers中包含任意数量的Driver节点。
<Motor>
<Drivers>
<Driver>
<Accident>
<Value>Y</Value>
</Accident>
</Driver>
<Driver>
<Accident>
<Value>Y</Value>
</Accident>
</Driver>
<Driver>
<Accident>
<Value>N</Value>
</Accident>
</Driver>
<Driver>
<Accident>
<Value>Y</Value>
</Accident>
</Driver>
</Drivers>
</Motor>
来自当前XSL文件的快照:
<xsl:template name="DriverScedule">
<fo:block>
Some Block of existing text
</fo:block>
---Now I have to display another noew block of test here based on the condition---
</xsl:template>
答案 0 :(得分:0)
xsl:if
似乎更适合此任务,而不是xsl:for-each
,例如:
<xsl:if test="//Driver/Accident/Value='Y'">
<!--`if test pass, print text "Foo" -->
Foo
</xsl:if>
答案 1 :(得分:0)
这是XML:
<?xml version="1.0" encoding="UTF-8"?>
<Policy>
<Risks>
<Risk>
<Motor>
<Vehicle>
<VehicleCondition>
<HasProblemsMakingItUnsafe>
<Value>true</Value>
</HasProblemsMakingItUnsafe>
</VehicleCondition>
</Vehicle>
</Motor>
</Risk>
<Risk>
<Motor>
<Vehicle>
<VehicleCondition>
<HasProblemsMakingItUnsafe>
<Value>true</Value>
</HasProblemsMakingItUnsafe>
</VehicleCondition>
</Vehicle>
</Motor>
</Risk>
<Risk>
<Motor>
<Vehicle>
<VehicleCondition>
<HasProblemsMakingItUnsafe>
<Value>false</Value>
</HasProblemsMakingItUnsafe>
</VehicleCondition>
</Vehicle>
</Motor>
</Risk>
</Risks>
</Policy>
我在XSLT下面使用过:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<html>
<body>
<xsl:if test="(/Policy/Risks/Risk/Motor/Vehicle/VehicleCondition/HasProblemsMakingItUnsafe/Value='false')">
<p>Hello</p>
</xsl:if>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
输出为:
Hello
所以xsl:如果实际在节点内迭代以检查是否有任何节点满足条件。