Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Xml XPath:如何选择属性值等于另一个元素值的元素_Xml_Xslt_Xpath - Fatal编程技术网

Xml XPath:如何选择属性值等于另一个元素值的元素

Xml XPath:如何选择属性值等于另一个元素值的元素,xml,xslt,xpath,Xml,Xslt,Xpath,我有以下xml,并尝试查找其中的所有链接关系: (xml片段) 安装驱动程序 ... 安装驱动程序 我不能只比较属性值字符串,因为我不能确定它们。所以我需要一个通用的XPath表达式。我想要其nodeid与相应的link元素匹配的标题文本 我尝试了以下方法: <xsl:value-of select="heading[@nodeid = //link/@linktotargetid]"/> 您能否提供有关问题发生位置的更多信息?您的XPath看起来是正确的,我刚刚用XSLT创建了

我有以下xml,并尝试查找其中的所有链接关系: (xml片段)

安装驱动程序
...
安装驱动程序
我不能只比较属性值字符串,因为我不能确定它们。所以我需要一个通用的XPath表达式。我想要其nodeid与相应的link元素匹配的标题文本

我尝试了以下方法:

<xsl:value-of select="heading[@nodeid = //link/@linktotargetid]"/>

您能否提供有关问题发生位置的更多信息?您的XPath看起来是正确的,我刚刚用XSLT创建了一个

<?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>

安装驱动程序
没有安装驱动程序
安装驱动程序

将显示正确的标题:
安装驱动程序

您的问题缺乏上下文。通常,最好使用从XML文档的另一个分支查找数据

例如,如果在样式表的顶层定义以下键:

<xsl:key name="head" match="heading" use="@nodeid" />

伟大的工作起来很有魅力!对不起,没有上下文
<xsl:key name="head" match="heading" use="@nodeid" />
<xsl:template match="link">
    ...
        <xsl:value-of select="key('head', @linktotargetid)" />
    ...
</xsl:template>