我有这个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”不能完成这项工作?
答案 0 :(得分:1)
要使xslt使用带有名称空间的xml文件,必须将名称空间声明添加到样式表中。 此外,默认名称空间(xml中没有pefix的名称空间)需要在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');