Как автоматически распространять атрибут XMLNS из шаблона XSL в другой - PullRequest
0 голосов
/ 08 октября 2009

Я ищу способ автоматического распространения атрибута XMLNS из одного шаблона XSL в другой, поэтому мне не нужно каждый раз его повторно декларировать.

Вот моя ситуация. Я пытаюсь преобразовать файл XML в файл XHTML, используя файл XSLT. Мой XML-файл:

<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" encoding="UTF-8" href="car.xslt" version="1.0"?>
<vehicle>
  <car>
    <make>Honda</make>
    <color>blue</color>
  </car>
  <car>
    <make>Saab</make>
    <color>red</color>
  </car>
</vehicle>

Мой XSLT-файл:

<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

<xsl:template match="/">
<html xmlns="http://www.w3.org/1999/xhtml">
<body>
  <table cellpadding="5" border="1">
    <tr><td>make</td><td>color</td></tr>
        <xsl:apply-templates/>
  </table>
</body>
</html>
</xsl:template>

<xsl:template match="car">
    <tr xmlns="http://www.w3.org/1999/xhtml">
      <td><xsl:value-of select="make"/></td><td><xsl:value-of select="color"/></td>
    </tr>
</xsl:template>

</xsl:stylesheet>

В файле XSLT я хотел бы просто сказать:

<xsl:template match="car">
    <tr>

без необходимости повторного объявления XMLNS. Есть предложения?

Ответы [ 2 ]

1 голос
/ 08 октября 2009

Вам не нужно переопределять xmlns в приведенном вами примере. Когда в XPath используется неквалифицированное QName (т.е. без префикса, такого как car), оно обрабатывается как элемент в пустом пространстве имен, независимо от того, есть ли у вас xmlns="..." в области или не. Таким образом, вы можете прикрепить xmlns="http://www.w3.org/1999/xhtml" к элементу <xsl:template>, и car не изменит его значения в XPath.

1 голос
/ 08 октября 2009

Вы можете сделать XHTML пространством имен по умолчанию в таблице стилей; затем он применяется к каждому шаблону:

<xsl:stylesheet xmlns="http://www.w3.org/1999/xhtml" 
  version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...