如何自动将XMLNS属性从XSL模板传播到另一个模板

时间:2009-10-07 22:55:09

标签: xml xslt xhtml

我正在寻找一种方法让XMLNS属性从一个XSL模板自动传播到另一个XSL模板,所以我不必每次都重新声明它。

这是我的情况。我正在尝试使用XSLT文件将XML文件转换为XHTML文件。我的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 个答案:

答案 0 :(得分:1)

您可以将XHTML设置为样式表中的默认命名空间;然后它适用于每个模板:

<xsl:stylesheet xmlns="http://www.w3.org/1999/xhtml" 
  version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

答案 1 :(得分:1)

在您提供的示例中,您无需重新声明xmlns。当在XPath中使用不合格的QName(即没有前缀的QName,如car)时,无论您是否{{1},它都被视为 empty 命名空间中的元素范围与否。因此,您可以在xmlns="..."元素上粘贴xmlns="http://www.w3.org/1999/xhtml"<xsl:template>不会在XPath中更改其含义。