2012-06-01 1 views
0

Я пытаюсь получить значение iWantToGetThis.jpg и поместить его в <img> во время моего преобразования XSL. Это как мой XML является структура:Получение значения атрибута в документе XML с использованием XSL

<article> 
    <info> 
     <mediaobject> 
      <imageobject> 
       <imagedata fileref='iWantToGetThis.jpg'> 

Вот что я придумал для XSL:

<xsl:template name="user.header.content"> 
    <xsl:stylesheet xmlns:d='http://docbook.org/ns/docbook'> 
     <img><xsl:attribute name="src">../icons/<xsl:value-of select='ancestor-or-self::d:article/info/mediaobject/imageobject/imagedata/@fileref' /></xsl:attribute></img> 
    </xsl:stylesheet> 
</xsl:template> 

Изображения добавляются к выходу, но атрибут SRC установлен в положении «../icons/», поэтому я предполагаю, что он не находит атрибут fileref в XML. Это выглядит совершенно справедливо для меня, поэтому я не уверен, что мне не хватает.

ответ

0

Я не уверен, как вы можете вообще что-либо получить, потому что это не похоже на действительный документ XSLT (я бы ожидал, что ошибка «Ключевое слово xsl: stylesheet может не содержать img.»).

Однако, возможно, вы просто показываете фрагмент кода. В этом случае проблема может заключаться в том, что вы указали только пространство имен для элемента статьи, когда вам действительно нужно указать его для всех элементов вашего xpath. Попробуйте этой

<xsl:value-of 
    select="ancestor-or-self::d:article/d:info/d:mediaobject/d:imageobject/d:imagedata/@fileref"/> 

Другой возможной проблемой может быть потому, что вы используете «предок или-я» ось XPATH найти атрибут. Это будет работать, только если ваш текущий контекст уже находился в элементе или его потомке.

В качестве примечания, вы можете упростить код, используя значение атрибута шаблонов здесь

<img src="../icons/{ancestor-or-self::d:article/d:info/d:mediaobject/d:imageobject/d:imagedata/@fileref}" /> 
+0

Это было просто отсутствие пространств имен на детей в выражении XPath. – Scribblemacher

+0

Эта форма таблицы стилей разрешена, когда полная форма будет состоять только из одного элемента ''. Таблица стилей содержит только содержимое этого элемента шаблона. [Читайте об этом здесь] (http://www.w3.org/TR/xslt#result-element-stylesheet). – Borodin

+0

XSL, с которым я работаю, намного больше. Я понял после публикации этого, что это не очень хороший пример XSL ... – Scribblemacher