XSLT名称空间不正确

时间:2014-03-16 14:25:53

标签: html xml xslt

您好我目前在我的XML文件中有以下命名空间

<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="products.xsl"?>
<products xmlns="http://localhost" 
          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
          xsi:schemaLocation="http://localhost products.xsd">
    <product>
         <productname>Product 1</productname>
         <productname>Product 2</productname>
         <productname>Product 3</productname>
         <productdetails>Details go here</productdetails>
         .... other elements that I don't use....
    </product>
</products>

当我尝试运行我的XSL文件时,我没有获得任何产品名称,我可以获取产品名称,我删除了产品根元素中的名称空间。所以我的命名空间mys是错误的。有人能告诉我哪里出了问题吗? 我的xsl文件是这样的:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="html" version="5.0" omit-xml-declaration="yes" indent="yes"
    doctype-system="about:legacy-compat"/>
<xsl:template match="/">
    <!--  HTML page starts here  -->
    <html>
        <head>
            <title>Products Page</title>
        </head>
        <body>
            <h2>Products</h2>
            <ul>
                <xsl:for-each select="products/product/productname">
                    <li>
                        <xsl:value-of select="."/>
                    </li>
                </xsl:for-each>
            </ul>
        </body>
    </html>
    <!--  HTML page ends here  -->
</xsl:template>
</xsl:stylesheet>

我正在寻找的结果是

...(the other XHTML tags)...
<ul>
    <li>Product 1</li>
    <li>Product 2</li>
    <li>Product 3</li>
</ul>
...(rest of XHTML tags)..

但是我根本没有得到这个,我得到的只是:

<!DOCTYPE html SYSTEM "about:legacy-compat">
<html>
   <head>
      <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
      <title>Products Page</title>
   </head>
 <body>
   <h2>Products</h2>
     <ul></ul>
 </body>
</html>

正如您所看到的,没有产品展示?

2 个答案:

答案 0 :(得分:1)

答案 1 :(得分:1)

请记住,XPath(以及XSLT)是名称空间感知的,但(至少在这些标准的1.0版本中)没有默认名称空间(xmlns =)赋值的概念。如果要选择命名空间节点,则XPath 必须使用绑定到正确名称空间的显式前缀。