来源:
<Data>
<AB>
<choice>Disclose</choice>
<image>
<img alt="No Image" xlink:href="abcd:202-11587" xmlns="http://www.w3.org/1999/xhtml" xmlns:xlink="http://www.w3.org/1999/xlink" xlink:title="Image" />
</image>
<link>abcd</link>
</AB>
<AB>
<choice>All</choice>
<image>
<img alt="No Image" xlink:href="abcd:202-2202" xmlns="http://www.w3.org/1999/xhtml" xmlns:xlink="http://www.w3.org/1999/xlink" xlink:title="Image" />
</image>
<link>all</link>
</AB>
</Data>
XSLT
<xsl:template match="Data">
<xsl:for-each select="AB">
<xsl:variable name="temp" select="choice"/>
<xsl:choose>
<xsl:when test="$temp='Disclose'">
<xsl:apply-templates select="image/node()"/>
</xsl:when>
</xsl:choose>
</xsl:for-each>
</xsl:template>
<xsl:template match="simple:image/xhtml:img">
<!-- I want to get the the name of the "choice" here-->
<!-- some other process-->
<!-- how to access the value of the <choice> element of that section-->
<!-- how to access <link> element of that section-->
</xsl:template>
任何人都可以帮忙完成。
答案 0 :(得分:2)
首先,由于这可能只是对您的代码示例的疏忽,您在匹配模板中指定了名称空间
<xsl:template match="simple:image/xhtml:img">
但是,您的示例XML中没有对“简单”命名空间的引用,因此在这种情况下它应该只是以下
<xsl:template match="image/xhtml:img">
但是在回答你的问题时,为了获得选择元素,因为你当前在 img 元素上进行了定位,你可以搜索层次结构,就像这样< / p>
<xsl:value-of select="../../choice" />
'..'代表父元素。因此,您将返回 AB 元素,并获取其子选择元素。
同样适用于链接元素
<xsl:value-of select="../../link" />
注意,它不一定是xsl:value-of here,如果有多个 link 元素,则可以使用 xsl:apply-templates
<xsl:apply-templates select="../../link" />
而且,如果您只需要在父图片元素之后发生的链接元素,则可以执行以下操作
<xsl:apply-templates select="../following-sibling::link" />