2013-09-24 3 views
0

У меня есть DITA bookmap где я хранящий пути изображения:селектор XPath не работает в процессе преобразования PDF

<bookmap> 
    <bookmeta> 
     <data id="productLogo"> 
      <image href="images/_notrans/frontcover/productLogo.svg" /> 
     </data> 
     <data id="productPhoto" > 
      <image href="images/_notrans/frontcover/productPhoto.jpg" /> 
     </data> 
    </bookmeta> 
</bookmap> 

Затем я пытаюсь захватить HREF значения по данным [@id]:

<xsl:variable name="productLogo"><xsl:value-of select="//data[@id='productLogo']/image/@href" /></xsl:variable> 
<xsl:variable name="productPhoto"><xsl:value-of select="//data[@id='productPhoto']/image/@href" /></xsl:variable> 

(Эти выражения XPath соответствуют HREF, когда я испытываю к моей bookmap в кислороде.)

в процессе преобразования вывода I:

<xsl:message>productPhoto: <xsl:value-of select="$productPhoto"/></xsl:message> 

Значение всегда пусто.

Однако, все работает, как ожидалось, если я заменю атрибут ID с номерами:

<xsl:variable name="productLogo"><xsl:value-of select="//data[1]/image/@href" /></xsl:variable> 
<xsl:variable name="productPhoto"><xsl:value-of select="//data[2]/image/@href" /></xsl:variable> 

Что я делаю не так, что это предотвращение использования @ ID = «все»?

ответ

1

XSLT не применяется непосредственно к содержимому Bookmap, он применяется к XML-документу, который содержит буклет с указанием всех ссылок на темы, расширенных в нем, и с некоторой предварительной обработкой, применяемой к нему. Если вы установили параметр «clean.temp» в «no», вы найдете во временной папке файл с именем «mapName_MERGED.xml», то есть XML-документ, по которому применяется XSLT, и, как вы увидите в нем все идентификаторы были изменены, чтобы быть уникальными в контексте всего документа XML.

Когда обычно работают с элементами данных, вы должны установить атрибут @name к ним как:

<data name="productLogo">

и сопрягать это имя в коде XSLT. Есть примеры использования «данных» в DITA 1.2 спецификации, а также:

http://docs.oasis-open.org/dita/v1.2/os/spec/langref/data.html#data

+0

Это имеет смысл Раду. Использование имени вместо id отлично работает. Спасибо! – mkaatman

0

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

Смежные вопросы