2017-03-27 4 views
0

から名前空間を除外されていません。「のxmlns:のxmlnsは、」XSLTを使用してXML出力ファイルに追加取得され、除外結果-プレフィックスは=「SIIは、」私の要件は、xmlファイルの下に変換することである要素

 <?xml version="1.0" encoding="UTF-8"?> 
<JEES_SSI> 
    <P_VAT_ID>10122</P_VAT_ID> 
    <LIST_G_LE_DETAILS> 
    <G_LE_DETAILS> 
    <ENTITYNAME>LE NAME</ENTITYNAME> 
    <TAXPAYEID>A0000000A</TAXPAYEID> 
    </G_LE_DETAILS> 
    </LIST_G_LE_DETAILS> 
</JEES_SSI> 

新しいXMLファイル:(するために必要な出力:

<?xml version="1.0" encoding="UTF-8"?> 
    <siiLR:SuministroLRFacturasRecibidas 
    xmlns:siiLR="https:/www.firstschema/SLR.xsd" 
    xmlns:sii="https://www.secondschema/sinfo.xsd" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="https://www.firstschema/ SLR.xsd"> 
    <sii:Cabecera> 
     <sii:Titular> 
     <sii:NombreRazon>LE NAME</sii:NombreRazon> 
     <sii:NIF>A0000000A</sii:NIF> 
    </sii:Titular> 
    </sii:Cabecera> 
</siiLR:SuministroLRFacturasRecibidas> 

と私はXSLの下に使用しています:

<?xml version="1.0" encoding="UTF-8" ?> 
    <xsl:stylesheet version="1.0" 
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xmlns:siiLR="https:/www.firstschema/SLR.xsd" 
    xmlns:sii="https://www.secondschema/sinfo.xsd" 
    exclude-result-prefixes="sii"> 

    <xsl:output method="xml" indent="yes" /> 

    <xsl:template match="/"> 
    <xsl:element name="siiLR:SuministroLRFacturasRecibidas"> 
     <xsl:attribute name="xmlns:siiLR"> <xsl:value-of select= "'https:/www.firstschema/SLR.xsd'" /></xsl:attribute> 
    <xsl:attribute name="xmlns:sii"> <xsl:value-of select= "'https://www.secondschema/sinfo.xsd'"/></xsl:attribute> 
    <xsl:attribute name="xsi:schemaLocation"> <xsl:value-of select= "'https://www.secondschema/ sinfo.xsd'" /> </xsl:attribute> 


    <xsl:element name="sii:Cabecera"> 

       <xsl:element name="sii:Titular"> 
        <xsl:element name="sii:NombreRazon"> <xsl:value-of select= "JEES_SSI/LIST_G_LE_DETAILS/G_LE_DETAILS/ENTITYNAME" /> </xsl:element> 
        <xsl:element name="sii:NIF"> <xsl:value-of select= "JEES_SSI/LIST_G_LE_DETAILS/G_LE_DETAILS/TAXPAYERID" /> </xsl:element> 
       </xsl:element> 
       </xsl:element>  
</xsl:element> 

出力私が得た:のxmlns = "http://www.w3.org/2000/xmlns/" エラーの原因となっている。

出力は のxmlnsのための追加の文字列を持っています: XML解析エラー:予約された接頭辞(xmlns)を宣言したり、宣言したり、宣言したりしないでください。 、sii名前空間の最初の要素にnamespaceが追加されています。

<?xml version = '1.0' encoding = 'UTF-8'?> 
     <siiLR:SuministroLRFacturasRecibidas xmlns:siiLR="https:/www.firstschema/SLR.xsd" 
      xmlns:xmlns="http://www.w3.org/2000/xmlns/" 
      xmlns:sii="https://www.secondschema/sinfo.xsd" 
      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
      xsi:schemaLocation="https://www.firstschema/ SLR.xsd"> 
      <sii:Cabecera xmlns:sii="https://www.secondschema/sinfo.xsd"> 
       <sii:Titular> 
       <sii:NombreRazon>LE NAME</sii:NombreRazon> 
       <sii:NIF>A0000000A</sii:NIF> 
       </sii:Titular> 
      </sii:Cabecera> 
     </siiLR:SuministroLRFacturasRecibidas> 

希望するxml出力ファイルを取得するには、xslファイルを修正してください。 xmlファイルの要素に使用される2つの異なる名前空間接頭辞(siiLrとsii)があります。 除外結果-プレフィックスは= "SII" SIIから名前空間URIを除くされていません。

カベセラ

をModiifedのXLS(implementaing提案@Stefan Hegny提案: 問題:のxmlns:のxmlns = "のhttp:// WWW。 w3.org/2000/xmlns/」もはや私は、XSLの下に使用 場合は表示されていない(削除のxmlnsを:siiLRとのxmlnsを:ルート要素からSII属性)。XLSの上使用して

<?xml version="1.0" encoding="UTF-8" ?> 
<xsl:stylesheet version="1.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xmlns:siiLR="https:/www.firstschema/SLR.xsd" 
xmlns:sii="https://www.secondschema/sinfo.xsd" 
> 

<xsl:output method="xml" indent="yes" /> 

<xsl:template match="/"> 
<xsl:element name="siiLR:SuministroLRFacturasRecibidas"> 
    <xsl:attribute name="xsi:schemaLocation"> <xsl:value-of select= "'https://www.secondschema/ sinfo.xsd'" /> </xsl:attribute> 
     <xsl:element name="sii:Cabecera"> 
      <xsl:element name="sii:Titular"> 
       <xsl:element name="sii:NombreRazon"> <xsl:value-of select= "JEES_SSI/LIST_G_LE_DETAILS/G_LE_DETAILS/ENTITYNAME" /> </xsl:element> 
       <xsl:element name="sii:NIF"> <xsl:value-of select= "JEES_SSI/LIST_G_LE_DETAILS/G_LE_DETAILS/TAXPAYERID" /> </xsl:element> 
      </xsl:element> 
      </xsl:element>  
</xsl:element> 
</xsl:template> 
</xsl:stylesheet> 

新しい出力:

 <?xml version = '1.0' encoding = 'UTF-8'?> 
    <siiLR:SuministroLRFacturasRecibidas  xmlns:siiLR="https:/www.firstschema/SLR.xsd" 
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
     xsi:schemaLocation="https://www.firstschema/ SLR.xsd"> 
     <sii:Cabecera xmlns:sii="https://www.secondschema/sinfo.xsd"> 
      <sii:Titular> 
      <sii:NombreRazon>LE NAME</sii:NombreRazon> 
      <sii:NIF>A0000000A</sii:NIF> 
      </sii:Titular> 
     </sii:Cabecera> 
    </siiLR:SuministroLRFacturasRecibidas> 

名前空間siiのリンクが要素 "Cabecera"に表示されています。これは、ルート要素に表示されますが、

Output with multiple sii element

答えて

1

<xsl:attribute name="xmlns:sii">のxmlns名前空間を追加しているがSuministroLRFacturasRecibidas、あなたは本当にこれをつもり?

編集:上部に宣言されているすべての名前空間接頭辞がすべてのところに継承されるため、これは必須ではありません。それらの属性はすべて省略してくださいxmlns:siixmlns:siiLRなど

sii名前空間は<xsl:element name="sii:Cabecera">のように作成された要素によって使用されているため、そのように表示されます。あなたはそれが

<xsl:element name="Cabecera">

のように名前空間を持たない要素を作成したくないし、任意のSIIコピーしない場合:あなたの出力に名前空間接頭辞の要素を。必要な出力のための

編集2あなたはSIIの名前空間を除外したいと思うなぜあなたは

を示して?あなたの出力に使用されているので、そこにある必要があります。

スキーマの場所には名前空間URLとスキーマURLが含まれていなければならないと思います。

単純に要素として書くことができるxsl:要素のいくつかを簡略化しました。

<?xml version="1.0" encoding="UTF-8" ?> 
    <xsl:stylesheet version="1.0" 
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xmlns:siiLR="https:/www.firstschema/SLR.xsd" 
    xmlns:sii="https://www.secondschema/sinfo.xsd"> 

    <xsl:output method="xml" indent="yes" /> 

    <xsl:template match="/"> 
    <xsl:element name="siiLR:SuministroLRFacturasRecibidas"> 
    <xsl:attribute name="xsi:schemaLocation"><xsl:text>https://www.secondschema/sinfo.xsd https://www.secondschema/sinfo.xsd</xsl:text></xsl:attribute> 


    <sii:Cabecera> 
       <sii:Titular> 
        <sii:NombreRazon> <xsl:value-of select= "JEES_SSI/LIST_G_LE_DETAILS/G_LE_DETAILS/ENTITYNAME" /> </sii:NombreRazon> 
        <sii:NIF> <xsl:value-of select= "JEES_SSI/LIST_G_LE_DETAILS/G_LE_DETAILS/TAXPAYERID" /> </sii:NIF> 
       </sii:Titular> 
       </sii:Cabecera>  
</xsl:element> 
+0

最終的なXMLファイルは、XSDを使用して検証する必要があります。そして、第2スキーマsinfo.xsdは最初の1つのSLR.xsdで参照されています。したがって接頭辞(sii)がないと、xml filwは検証されません。 –

+0

なので、sii名前空間接頭辞は問題ではありませんが、なぜ 'name =" xmlns:sii "'ですか?ああ、私はあなたが手で参照しているスキーマを実装しようとしています...よく、siiとsiiLR名前空間の接頭辞は上の宣言から継承され、 '。 –

+0

ステファンありがとうございます。ルート要素SuministroLRFacturasRecibidasからsiiとsiiLRに使用されている属性を削除すると、出力にはsii名前空間の情報がありません。 xmlns:xmlns = "http://www.w3.org/2000/xmlns/"がoutput.butに表示されていませんが、子要素

0

なぜsiiLR:SuministroLRPagosRecibidasをxsl:要素として使用しますか?代わりに使用したの :

<xsl:element name="siiLR:SuministroLRFacturasRecibidas"> 

<xsl:attribute name="xsi:schemaLocation"><xsl:text>https://www.secondschema/sinfo.xsd https://www.secondschema/sinfo.xsd</xsl:text></xsl:attribute> 

....

試してみてください。

にxsi:schemaLocationの= "https://www2.agenciatributaria.gob.es/static_files/common/internet/dep/aplicaciones/es/aeat/ssii/fact/ws/SuministroLR.xsd SuministroLR.xsd">

これは問題を解決するはずです。お知らせ下さい。

関連する問題