私の XML コード (パブと人を含む):
<document>
<pubs>
<pub id="pub1">
<open>true</open>
</pub>
<pub id="pub2">
<open>false</open>
</pub>
</pubs>
<people>
<person>
<name>John</name>
<pubId>pub1</pubId>
</person>
<person>
<name>Paul</name>
<pubId>pub2</pubId>
</person>
</people>
</document>
<person>
from からへの参照<pub>
( person/pubId
references ) を使用しますpub[@id]
。パブ自体にはブール値があります<open>
(パブが開いているか閉じているかを示します)。
count()
XSLTを使って、パブに行ける人数を増やしたい。パブに行くには、パブの<open>
値が である必要がありますtrue
。
私が完全にコーディングできない2つの可能な解決策:
人を反復処理し、数を追跡します。
<xsl:for-each select="person"> <xsl:variable name="pId" select="pubId" /> <xsl:if test="root()/document/pubs/pub[@pubId=$pId]/open = 'true'" > <!-- any way to keep track of this number? --> </xsl:if> </xsl:for-each>
count() 関数を直接使用します。
<count> <xsl:value-of select="count(//person[root()/document/pubs/pub[@id = pubId]/open = 'true'])" /> </count>
2 番目のオプションはより簡潔で正しいようですが、うまくいきません。
何か案は?