0

我有这个 XML 文档

<?xml version="1.0" encoding="utf-8"?>
<?xml-stylesheet type="text/xsl" href="data.xsl"?>
<products xmlns="http://zanox.com/productdata/exportservice/v1" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://zanox.com/productdata/exportservice/v1 http://productdata.zanox.com/exportservice/schema/export-1.1.xsd">
<product>
    <name>BERTRAND BELIN+YANN DESTAL+D.RIVET</name>
    <program>3467</program>
</product>

还有我的 XSL:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="text" omit-xml-declaration="yes"/>

<xsl:template match="/">  
 <xsl:apply-templates select="//product"/>
</xsl:template>

   <xsl:template match="product">
    <xsl:text>insert into data (name, program) values(</xsl:text>
    <xsl:value-of select="./name"/>
    <xsl:text>,'</xsl:text>
    <xsl:value-of select="./program"/>
    <xsl:text>'); </xsl:text>
   </xsl:template>

 </xsl:stylesheet>

但这不起作用我需要从 XML 中的产品中删除 xmlns 命名空间。我不明白为什么 omit-xml-declaration="yes" 不起作用?

4

1 回答 1

1

要使您的 xslt 使用具有名称空间的 xml 文件,您必须将名称空间声明添加到样式表中。此外,默认名称空间(xml 中没有前缀的名称空间)需要在 xslt 中具有前缀。要使您的样式表正常工作,请尝试以下操作:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
                xmlns:v1="http://zanox.com/productdata/exportservice/v1">
    <xsl:output method="text" omit-xml-declaration="yes"/>

    <xsl:template match="/">
        <xsl:apply-templates select="//v1:product"/>
    </xsl:template>

    <xsl:template match="v1:product">
        <xsl:text>insert into data (name, program) values(</xsl:text>
        <xsl:value-of select="./v1:name"/>
        <xsl:text>,'</xsl:text>
        <xsl:value-of select="./v1:program"/>
        <xsl:text>'); </xsl:text>
    </xsl:template>

</xsl:stylesheet>

xml 声明是大多数 xml 文件中的第一行:

<?xml version="1.0"?>

这将被“省略” omit-xml-declaration="yes"。但只对xsl:output method="xml".

上面的 xslt 将生成以下输出:

insert into data (name, program) values(BERTRAND BELIN+YANN DESTAL+D.RIVET,'3467');
于 2013-05-22T16:54:37.123 回答