1

次の情報を含むxmlファイルがあります。

  <infAdic>
   <infAdFisco>IMUNIDADE ICMS CONF. ART.155 DA CONST. FEDERAL-LUB.     DERIVADO</infAdFisco> 
    <infCpl>
      Preco sujeito alteracao. - O(s) produto(s) objeto(s) desta Nota Fiscal esta(ao)      adequadamente acondicionado(s) para suportar os riscosnormais de carregamento,     descarregamento, transbordo e transporte (Letra C do Item II, de Artigo 22, do Decreto N.96044/88) 
       <![CDATA[ <fabEntrega>Codi</fabEntrega>]]> 
        PO. number: Teste NFe 13122012 
    </infCpl>
    <obsCont xCampo="DOCNUM">
      <xTexto>0006703134</xTexto> 
    </obsCont>
    <obsCont xCampo="emailDestinatarioNFe">
      <xTexto>xxxxx@xxxx.com</xTexto> 
    </obsCont>
    <obsCont xCampo="idAplic">
    <xTexto>LUBES</xTexto> 
    </obsCont>
 </infAdic>

しかし、上記のxmlファイルを以下のxlstプログラムで実行すると

 <?xml version="1.0" encoding="UTF-8"?>
  <xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:nfe="http://www.portalfiscal.inf.br/nfe">
    <xsl:output method="xml" version="1.0" encoding="UTF-8" indent="no" cdata-section-elements="nfe:infCpl"/>
<xsl:template match="/nfe:enviNFe">
    <soap12:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap12="http://www.w3.org/2003/05/soap-envelope">
        <soap12:Header>
            <nfeCabecMsg xmlns="http://www.portalfiscal.inf.br/nfe/wsdl/NfeRecepcao2">
                <cUF>
                    <xsl:value-of select="nfe:NFe[1]/nfe:infNFe/nfe:ide/nfe:cUF"/>
                </cUF>
                <versaoDados>
                    <xsl:value-of select="@versao"/>
                </versaoDados>
            </nfeCabecMsg>
        </soap12:Header>
        <soap12:Body>
            <nfeDadosMsg xmlns="http://www.portalfiscal.inf.br/nfe/wsdl/NfeRecepcao2">
                    <enviNFe xmlns="http://www.portalfiscal.inf.br/nfe">
                        <xsl:attribute name="versao"><xsl:value-of select="@versao"/></xsl:attribute>
                        <xsl:copy-of select="nfe:idLote"/>
                        <xsl:for-each select="nfe:NFe">
                            <xsl:text disable-output-escaping="yes"><![CDATA[<NFe xmlns="http://www.portalfiscal.inf.br/nfe">]]></xsl:text>
                            <xsl:copy-of select="*"/>
                            <xsl:text disable-output-escaping="yes"><![CDATA[</NFe>]]></xsl:text>
                        </xsl:for-each>
                    </enviNFe>
            </nfeDadosMsg>
        </soap12:Body>
    </soap12:Envelope>
 </xsl:template>
</xsl:stylesheet>

CDATA情報を含むinfCplフィールドが表示されません。これは私が見る結果です:

 <infCpl>
     Preco sujeito alteracao. - O(s) produto(s) objeto(s) desta Nota Fiscal esta      (ao) adequadamente acondicionado(s) para suportar os riscosnormais de    carregamento,      descarregamento, transbordo e transporte (Letra C do Item II, de         Artigo     22, do Decreto N.96044/88) 
    <fabEntrega>Codi</fabEntrega> 
      PO. number: Teste NFe 13122012 
 </infCpl>

以下の結果が欲しいので、私を助けてくれませんか?

 <infCpl>
    Preco sujeito alteracao. - O(s) produto(s) objeto(s) desta Nota Fiscal esta(ao)      adequadamente acondicionado(s) para suportar os riscosnormais de carregamento,     descarregamento, transbordo e transporte (Letra C do Item II, de Artigo     22, do Decreto N.96044/88) 
     <![CDATA[ <fabEntrega>Codi</fabEntrega>]]> 
  PO. number: Teste NFe 13122012 
 </infCpl>

よろしく、SérgioSalomão

4

2 に答える 2

1

XMLのCDATAは、情報を伝達するようには設計されていません。入力のCDATA境界を気にする必要はありません。それらを気にする場合は、さまざまなツールが必要です。XSLTは、CDATAは単なるオーサリングの便宜であり、ドキュメントの受信者に情報を伝達する方法ではないと想定しています。

ただし、CDATAがこのように悪用されたXMLの処理に固執している場合は、KernowForSaxonにバンドルされているAndrewWelchのLexEvツールを参照してください。

于 2012-12-20T00:24:33.233 に答える
1

infCpl混合コンテンツ(要素とCDATA)ではなく、CDATAのみが含まれることが確実にわかっている場合はinfCpl、でとして指定できますcdata-section-elementxsl:output

<xsl:output indent="yes" cdata-section-elements="infCpl"/>

例...

XML入力

<infAdic>
    <infAdFisco>IMUNIDADE ICMS CONF. ART.155 DA CONST. FEDERAL-LUB.     DERIVADO</infAdFisco> 
    <infCpl>
        Preco &amp; &gt; &lt; &apos; &quot; sujeito alteracao. - O(s) produto(s) objeto(s) desta Nota Fiscal esta(ao)      adequadamente acondicionado(s) para suportar os riscosnormais de carregamento,     descarregamento, transbordo e transporte (Letra C do Item II, de Artigo 22, do Decreto N.96044/88) 
        <![CDATA[ <fabEntrega>Codi</fabEntrega>]]> 
        PO. number: Teste NFe 13122012 
    </infCpl>
    <obsCont xCampo="DOCNUM">
        <xTexto>0006703134</xTexto> 
    </obsCont>
    <obsCont xCampo="emailDestinatarioNFe">
        <xTexto>xxxxx@xxxx.com</xTexto> 
    </obsCont>
    <obsCont xCampo="idAplic">
        <xTexto>LUBES</xTexto> 
    </obsCont>
</infAdic>

XSLT 2.0

<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output indent="yes" cdata-section-elements="infCpl"/>
    <xsl:strip-space elements="*"/>

    <xsl:template match="@*|node()">
        <xsl:copy>
            <xsl:apply-templates select="@*|node()"/>
        </xsl:copy>
    </xsl:template>

</xsl:stylesheet>

XML出力

<infAdic>
   <infAdFisco>IMUNIDADE ICMS CONF. ART.155 DA CONST. FEDERAL-LUB.     DERIVADO</infAdFisco>
   <infCpl><![CDATA[
        Preco & > < ' " sujeito alteracao. - O(s) produto(s) objeto(s) desta Nota Fiscal esta(ao)      adequadamente acondicionado(s) para suportar os riscosnormais de carregamento,     descarregamento, transbordo e transporte (Letra C do Item II, de Artigo 22, do Decreto N.96044/88) 
         <fabEntrega>Codi</fabEntrega> 
        PO. number: Teste NFe 13122012 
    ]]></infCpl>
   <obsCont xCampo="DOCNUM">
      <xTexto>0006703134</xTexto>
   </obsCont>
   <obsCont xCampo="emailDestinatarioNFe">
      <xTexto>xxxxx@xxxx.com</xTexto>
   </obsCont>
   <obsCont xCampo="idAplic">
      <xTexto>LUBES</xTexto>
   </obsCont>
</infAdic>
于 2012-12-19T20:43:19.543 に答える