我有以下xml并尝试查找其中的所有链接关系: (xml片段)
<heading nodeid="LINK_installing_driver">Installing the driver</heading>
...
<link linktotargetid="LINK_installing_driver">Installing the driver</link>
我不能只比较属性值字符串,因为我不确定它们。所以我需要一个通用的XPath表达式。我想要标题的文本,其nodeid与相应的链接元素匹配。
我尝试了以下内容:
<xsl:value-of select="heading[@nodeid = //link/@linktotargetid]"/>
答案 0 :(得分:1)
您能否提供有关问题发生位置的更多信息?你的XPath看起来是正确的,我刚刚用XSLT
创建了一个example<?xml version="1.0" encoding="UTF-8" ?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" doctype-public="XSLT-compat"
omit-xml-declaration="yes" encoding="UTF-8" indent="yes" />
<xsl:template match="/">
<xsl:apply-templates/>
</xsl:template>
<xsl:template match="@*|node()">
<xsl:value-of select="heading[@nodeid = //link/@linktotargetid]"/>
</xsl:template>
</xsl:stylesheet>
和示例输入XML
<root>
<heading nodeid="LINK_installing_driver">Installing the driver</heading>
<link linktotargetid="LINK_installing_not_driver">Not Installing the driver</link>
<link linktotargetid="LINK_installing_driver">Installing the driver</link>
</root>
显示正确的标题:Installing the driver
答案 1 :(得分:1)
你的问题缺乏背景。通常,最好使用键从XML文档的另一个分支中查找数据。
例如,如果您在样式表的顶层定义以下键:
<xsl:key name="head" match="heading" use="@nodeid" />
然后您可以在link
的上下文中使用它来检索相应heading
的值,例如
<xsl:template match="link">
...
<xsl:value-of select="key('head', @linktotargetid)" />
...
</xsl:template>