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

名前空間を含む xml ファイルで xslt を機能させるには、名前空間宣言をスタイル シートに追加する必要があります。また、デフォルトの名前空間 (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');
于 2013-05-22T16:54:37.123 に答える