0

我正在尝试创建一个 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 的经验,我目前正试图解决这个问题。

4

1 回答 1

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>
于 2012-04-26T10:19:17.957 回答