2014-11-09 2 views
0

У меня есть следующие XML и пытаются найти все отношения в ссылку: (XML фрагмент)XPath: как выбрать элемент, где значение атрибута равно другое значение элемента

<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]"/> 

ответ

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> 
+0

Отлично! Работает как шарм! Извините за отсутствие контекста – DTR9000

1

Не могли бы вы предоставить более подробную информацию о том, где проблема возникает? Ваш XPath выглядит правильно, я только что создал example с 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> 

правильный заголовок: Installing the driver