Включить поле XML в файл XSL - PullRequest
1 голос
/ 21 марта 2011

У меня есть файл конфигурации XML, я хочу извлечь одно из полей из этого файла и включить его в свой XSL.

Вот примеры, с которыми я столкнулся:

<xsl:template match="">
  <html>
    <head>
      <title>My Page</title>
      <!-- CSS styles included here -->
      <xsl:copy-of select="document('style.xml')/style" />
    </head>
    <body>
      <!-- ... -->
    </body>
  </html>
</xsl:template>

Но это не решает мою проблему, поскольку включает в себя весь XML-файл. Я хочу, чтобы было включено только одно из свойств в xml-файле, поэтому мне нужно было бы проанализировать его внутри xsl и включить только этот узел. Как мне это сделать?

Спасибо

Обновление от комментариев

Если я включу следующую строку в мой XSL:

<xsl:copy-of select="document('cmsaENV.xml')/STR_ENV_PROPS/text()"/>

А мой xml содержит:

<STR_ENV_PROPS value="c:/apps/cit/deploy/d_cmsadm/cmsa_applicationEnv.xml"/>

Тогда строка "c:/apps/cit/deploy/d_cmsadm/cmsa_applicationEnv.xm" будет размещен внутри моего XSL? Это исправить?

1 Ответ

4 голосов
/ 21 марта 2011

Я не уверен, что действительно получу то, что вы хотите, но если вы хотите включить только содержимое элемента <style> (а не сам элемент), замените

<xsl:copy-of select="document('style.xml')/style" />

с

<xsl:value-of select="document('style.xml')/style/text()" />

text() выбирает текстовое содержимое элемента style в импортированном документе.

РЕДАКТИРОВАТЬ: если вместо текстового содержимого вы хотите значение атрибута, вам нужно что-то вроде:

<xsl:value-of select="string(document('style.xml')/style/@someAttribute)" />

Обратите внимание, что вам нужно преобразовать атрибут в обычную текстовую строку, что я делаю с помощью функции string().

...