任务:
上下文节点是任何<pic>
元素(我的处理在其中)
一个match="pic"
模板),如何返回符合以下两个条件的第一个<a>
元素?
<pic>
元素AND 假设:
<pic>
元素有时是其他<pic>
元素的兄弟,但是
不总是。他们也不是其他<a>
元素的兄弟姐妹。<a>
元素有时是其他<a>
元素的兄弟,但并非总是如此。这是XML结构:
<document>
<pic>
<img>
</pic>
....
<ul>
<li>
<pic>
<img>
</pic>
</li>
<li>
<a href="someFile.html"> <!-- doesn't meet both criteria -->
</li>
</ul>
<p>
<a href="anotherFile.html"> <!-- doesn't meet both criteria -->
<pic>
<img>
</pic>
...
<a href="...blah....html"> <!-- meets both criteria -->
<pic>
<img>
</pic>
...
<p>
<a href="someOtherFile.html> <!-- doesn't meet both criteria -->
<p>
...
<pic>
<img>
</pic>
...
<a href="...blah....html"> <!-- meets both criteria -->
...
<pic>
<img>
</pic>
...
答案 0 :(得分:1)
你走了:
我的Xml
<document>
<pic title="match none"/>
<ul/>
<pic title="match one"/>
<a title="one">blah</a>
<pic title="match two"/>
<a title="two">blah</a>
<pic title="match none"/>
<pic title="match three"/>
<ul>
<li>
<a title="three">blah</a>
</li>
</ul>
<a title="none">blah,</a>
</document>
我的XSL
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
version="1.0">
<xsl:template match="pic">
<!-- current pic identity -->
<xsl:variable name="identity" select="generate-id()"/>
<xsl:variable name="next-a-element" select="following::a[generate-id(preceding::pic[1]) = $identity][contains(.,'blah')]"/>
<xsl:if test="$next-a-element">
<xsl:comment>pic <xsl:value-of select="@title"/></xsl:comment>
<xsl:comment>a: <xsl:value-of select="@title"/></xsl:comment>
</xsl:if>
</xsl:template>
</xsl:stylesheet>
我的结果
<!--pic match one--><!--a: match one-->
<!--pic match two--><!--a: match two-->
<!--pic match three--><!--a: match three-->