2012-04-26 81 views
0

我想創建一個XSLT文件,我可以得到它沒有包括在任一文件命名空間的工作,但只要我不包括在任,它停止工作。 這裏是我使用的例子。XSLT轉換無法工作,如何命名空間包含?

我的XML文件

<cd> 
    <title>Empire Burlesque</title> 
    <artist>Bob Dylan</artist> 
    <country>USA</country> 
    <company>Columbia</company> 
    <price>10.90</price> 
    <year>1985</year> 
    </cd> 
    <cd> 
    <title>Empire sdf</title> 
    <artist>Bob sdf</artist> 
    <country>2</country> 
    <company>asdfs</company> 
    <price>12.90</price> 
    <year>1935</year> 
    </cd> 
</catalog> 

我轉換文件。

<?xml version="1.0" encoding="ISO-8859-1"?> 

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
<xsl:output method="xml" indent="yes"/> 
<xsl:template match="/"> 
    <html><body><table border="1"> 
    <tr bgcolor="#9acd32"><th>Title</th><th>Artist</th></tr> 
    <xsl:for-each select="catalog/cd"> 
    <tr> 
     <td><xsl:value-of select="title"/></td> 
     <td><xsl:value-of select="artist"/></td> 
    </tr> 
    </xsl:for-each> 
    </table></body></html> 
</xsl:template> 

</xsl:stylesheet> 

我的結果

<?xml version="1.0" encoding="UTF-8"?> 
<html> 
    <body> 
     <table border="1"> 
      <tr bgcolor="#9acd32"> 
       <th>Title</th> 
       <th>Artist</th> 
      </tr> 
      <tr> 
       <td>Empire Burlesque</td> 
       <td>Bob Dylan</td> 
      </tr> 
      <tr> 
       <td>Empire sdf</td> 
       <td>Bob sdf</td> 
      </tr> 
     </table> 
    </body> 
</html> 

沒有,如果我改變上述這一點。 我的新的XML文件

<?xml version="1.0" encoding="ISO-8859-1"?> 
<catalog 
xmlns="http://www.someurl.com/v3.0" 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xsi:schemaLocation="http://www.someurl.com/v3.0 ../someschema.xsl" 
> 

    <cd> 
    <title>Empire Burlesque</title> 
    <artist>Bob Dylan</artist> 
    <country>USA</country> 
    <company>Columbia</company> 
    <price>10.90</price> 
    <year>1985</year> 
    </cd> 
    <cd> 
    <title>Empire sdf</title> 
    <artist>Bob sdf</artist> 
    <country>2</country> 
    <company>asdfs</company> 
    <price>12.90</price> 
    <year>1935</year> 
    </cd> 
</catalog> 

我的新的轉換文件。

 <?xml version="1.0" encoding="ISO-8859-1"?> 

     <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
xmlns="http://www.someurl.com/v3.0" 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xsi:schemaLocation="http://www.someurl.com/v3.0 ../someschema.xsl"> 
     <xsl:output method="xml" indent="yes"/> 
     <xsl:template match="/"> 
      <html><body><table border="1"> 
      <tr bgcolor="#9acd32"><th>Title</th><th>Artist</th></tr> 
      <xsl:for-each select="catalog/cd"> 
      <tr> 
       <td><xsl:value-of select="title"/></td> 
       <td><xsl:value-of select="artist"/></td> 
      </tr> 
      </xsl:for-each> 
      </table></body></html> 
     </xsl:template> 

     </xsl:stylesheet> 

我現在在我的轉換文件中沒有數據了嗎? 請原諒,如果這個問題是基本的,我有沒有XSLT經驗,我想目前環繞它我的頭。

回答

1

在XSLT 2.0:你只需要在你的xsl:stylesheet元素添加以下屬性:xpath-default-namespace="http://www.someurl.com/v3.0"

使用XSLT 1.0:你必須給一個前綴來限定你的命名空間中的XSL文件。示例如下:

<?xml version="1.0" encoding="ISO-8859-1"?> 
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
    xmlns:ns="http://www.someurl.com/v3.0" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://www.someurl.com/v3.0 ../someschema.xsl"> 
    <xsl:output method="xml" indent="yes"/> 
    <xsl:template match="/"> 
     <html><body><table border="1"> 
      <tr bgcolor="#9acd32"><th>Title</th><th>Artist</th></tr> 
      <xsl:for-each select="ns:catalog/ns:cd"> 
       <tr> 
        <td><xsl:value-of select="ns:title"/></td> 
        <td><xsl:value-of select="ns:artist"/></td> 
       </tr> 
      </xsl:for-each> 
     </table></body></html> 
    </xsl:template> 

</xsl:stylesheet> 
+0

我將此添加到我的xslt文件中,但現在運行時遇到意外屬性?並將其添加到我的XML文件沒有區別? – Purplemonkey 2012-04-26 10:24:54

+0

是我糾正:XPath的默認名稱空間只是一個XSLT 2.0功能。抱歉。 – 2012-04-26 10:26:11

+0

我可以感受到接近邊緣的便士:)感謝您的幫助。 – Purplemonkey 2012-04-26 10:33:34