2016-03-21 4 views
0

I hatte folgende XML-Eingabe zu transformieren,Umbenennen Wurzelelement und die Beseitigung der Nullwerte XSLT Verwendung

<Standards xmlns="http://ws.wso2.org/dataservice"> 
     <Standard> 
      <ProductID>200057</ProductID> 
      <Prefix>ISO</Prefix> 
      <SNumber>1001</SNumber> 
      <DraftProducts> 
       <RelatedProduct> 
        <ProductID>1500163</ProductID> 
       </RelatedProduct> 
      </DraftProducts> 
      <ReferenceProducts> 
       <RelatedProduct> 
        <ProductID>263973</ProductID> 
        <RelationId>708519</RelationId> 
        <Designation xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:nil="true"/> 
       </RelatedProduct> 
       <RelatedProduct> 
        <ProductID>320056</ProductID> 
        <RelationId>934789</RelationId> 
        <Designation xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:nil="true"/> 
       </RelatedProduct> 
      </ReferenceProducts> 
      <RelatedIntProducts> 
       <RelatedProduct> 
        <ProductID xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:nil="true"/> 
        <RelationId>116881</RelationId> 
        <Relationship>Identical</Relationship> 
        <Designation>NEN ISO 1001</Designation> 
       </RelatedProduct> 
       <RelatedProduct> 
        <ProductID>208076</ProductID> 
        <RelationId>116886</RelationId> 
        <Relationship>Identical</Relationship> 
        <Designation xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:nil="true"/> 
       </RelatedProduct> 
      </RelatedIntProducts> 
      <S1>1001</S1> 
      <S2>1986</S2> 
     </Standard> 
     <Standard> 
      <ProductID>200058</ProductID> 
      <Prefix>ISO</Prefix> 
      <SNumber>1002</SNumber> 
      <DraftProducts> 
       <RelatedProduct> 
        <ProductID>1500167</ProductID> 
       </RelatedProduct> 
      </DraftProducts> 
      <ReferenceProducts> 
       <RelatedProduct> 
        <ProductID>263974</ProductID> 
        <RelationId>708519</RelationId> 
        <Designation xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:nil="true"/> 
       </RelatedProduct> 
       <RelatedProduct> 
        <ProductID>320052</ProductID> 
        <RelationId>934754</RelationId> 
        <Designation xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:nil="true"/> 
       </RelatedProduct> 
      </ReferenceProducts> 
      <RelatedIntProducts> 
       <RelatedProduct> 
        <ProductID xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:nil="true"/> 
        <RelationId>116837</RelationId> 
        <Relationship>Identical</Relationship> 
        <Designation>NEN ISO 1001</Designation> 
       </RelatedProduct> 
       <RelatedProduct> 
        <ProductID>208074</ProductID> 
        <RelationId>116843</RelationId> 
        <Relationship>Identical</Relationship> 
        <Designation xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:nil="true"/> 
       </RelatedProduct> 
      </RelatedIntProducts> 
      <S1>1005</S1> 
      <S2>1983</S2> 
     </Standard> 
    </Standards> 

in das folgende Ausgabeformat.

<Standards xmlns="http://ws.wso2.org/dataservice"> 
    <Product> 
     <ProductID>200057</ProductID> 
     <Prefix>ISO</Prefix> 
     <SNumber>1001</SNumber> 
     <RelatedProducts> 
      <RelatedProduct> 
       <ProductID>1500163</ProductID> 
       <RelationType>DraftProducts</RelationType> 
      </RelatedProduct> 
      <RelatedProduct> 
       <ProductID>263973</ProductID> 
       <RelationId>708519</RelationId> 
       <RelationType>ReferenceProducts</RelationType> 
       <Designation xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:nil="true"/> 
      </RelatedProduct> 
      <RelatedProduct> 
       <ProductID>320056</ProductID> 
       <RelationId>934789</RelationId> 
       <RelationType>ReferenceProducts</RelationType> 
       <Designation xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:nil="true"/> 
      </RelatedProduct> 
      <RelatedProduct> 
       <ProductID xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:nil="true"/> 
       <RelationId>116881</RelationId> 
       <Relationship>Identical</Relationship> 
       <RelationType>RelatedIntProducts</RelationType> 
       <Designation>NEN ISO 1001</Designation> 
      </RelatedProduct> 
      <RelatedProduct> 
       <ProductID>208076</ProductID> 
       <RelationId>116886</RelationId> 
       <RelationType>RelatedIntProducts</RelationType> 
       <Relationship>Identical</Relationship> 
       <Designation xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:nil="true"/> 
      </RelatedProduct> 
     </RelatedProducts> 
     <S1>1001</S1> 
     <S2>1986</S2> 
    </Product> 
    <Product> 
     <ProductID>200058</ProductID> 
     <Prefix>ISO</Prefix> 
     <SNumber>1002</SNumber> 
     <RelatedProducts> 
      <RelatedProduct> 
       <ProductID>1500167</ProductID> 
       <RelationType>DraftProducts</RelationType> 
      </RelatedProduct> 
      <RelatedProduct> 
       <ProductID>263974</ProductID> 
       <RelationId>708519</RelationId> 
       <RelationType>ReferenceProducts</RelationType> 
       <Designation xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:nil="true"/> 
      </RelatedProduct> 
      <RelatedProduct> 
       <ProductID>320052</ProductID> 
       <RelationId>934754</RelationId> 
       <RelationType>ReferenceProducts</RelationType> 
       <Designation xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:nil="true"/> 
      </RelatedProduct> 
      <RelatedProduct> 
       <ProductID xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:nil="true"/> 
       <RelationId>116837</RelationId> 
       <RelationType>RelatedIntProducts</RelationType> 
       <Relationship>Identical</Relationship> 
       <Designation>NEN ISO 1001</Designation> 
      </RelatedProduct> 
      <RelatedProduct> 
       <ProductID>208074</ProductID> 
       <RelationId>116843</RelationId> 
       <RelationType>RelatedIntProducts</RelationType> 
       <Relationship>Identical</Relationship> 
       <Designation xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:nil="true"/> 
      </RelatedProduct> 
     </RelatedProducts> 
     <S1>1005</S1> 
     <S2>1983</S2> 
    </Product> 
</Standards> 

Mit Hilfe von anderen könnte ich die folgende xslt schreiben, um diese Transformation zu tun.

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
    xmlns:x="http://ws.wso2.org/dataservice" xmlns="http://ws.wso2.org/dataservice" 
    exclude-result-prefixes="x" version="1.0"> 

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

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

    <xsl:template match="x:Standard"> 
     <Product> 
      <xsl:copy-of select="x:ProductID" /> 
      <xsl:copy-of select="x:Prefix" /> 
      <xsl:copy-of select="x:SNumber" /> 
      <xsl:copy-of select="x:Year" /> 
      <xsl:copy-of select="x:Designation" /> 
      <xsl:copy-of select="x:Publisher" /> 
      <RelatedProducts> 
       <xsl:apply-templates select=".//x:RelatedProduct" /> 
      </RelatedProducts> 
      <xsl:copy-of select="x:ProductICSCodes" /> 
      <xsl:copy-of select="x:ProductDescriptions" /> 
      <xsl:copy-of select="x:IndustryCodes" /> 
      <xsl:copy-of select="x:ProductAttributes" /> 
      <xsl:copy-of select="x:ProductReconfirmationNotices" /> 
      <xsl:copy-of select="x:Type" /> 
      <xsl:copy-of select="x:SaleItems" /> 
      <xsl:copy-of select="x:Committee" /> 
      <xsl:copy-of select="x:CommentClosesDate" /> 
      <xsl:copy-of select="x:Note" /> 
      <xsl:copy-of select="x:InternalNote" /> 
      <xsl:copy-of select="x:DummyProductLink" /> 
      <xsl:copy-of select="x:Status" /> 
      <xsl:copy-of select="x:State" /> 
      <xsl:copy-of select="x:UpdateNote" /> 
      <xsl:copy-of select="x:ThumbnailPath" /> 
      <xsl:copy-of select="x:SortOrder" /> 
      <xsl:copy-of select="x:EntryDate" /> 
      <xsl:copy-of select="x:ExpiryDate" /> 
      <xsl:copy-of select="x:SupersededDate" /> 
      <xsl:copy-of select="x:UpdateDate" /> 
      <xsl:copy-of select="x:WithdrawnDate" /> 
      <xsl:copy-of select="x:PluginName" /> 
      <xsl:copy-of select="x:S1" /> 
      <xsl:copy-of select="x:S2" /> 
      <xsl:copy-of select="x:S3" /> 
      <xsl:copy-of select="x:S4" /> 
      <xsl:copy-of select="x:S5" /> 
      <xsl:copy-of select="x:S6" /> 
      <xsl:copy-of select="x:S7" /> 
      <xsl:copy-of select="x:S8" /> 
      <xsl:copy-of select="x:S9" /> 
      <xsl:copy-of select="x:S10" /> 
      <xsl:copy-of select="x:HasLexConnect" /> 
      <xsl:copy-of select="x:HasCodeConnect" /> 
     </Product> 
    </xsl:template> 
    <xsl:template match="x:RelatedProduct"> 
     <xsl:copy> 
      <xsl:apply-templates select="@*|*[not(name()='RelationId')]" /> 
      <RelationType> 
       <xsl:value-of select="name(..)" /> 
      </RelationType> 
     </xsl:copy> 
    </xsl:template> 

</xsl:stylesheet> 

Jetzt brauche ich das Stammelement als Produkte aus der Ausgabe statt Standards und beseitigen alle nil Werte umzubenennen. Die Nullwerte haben das folgende Format.

<Designation xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:nil="true"/> 
     <Abstract xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:nil="true"/> 
     <History xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:nil="true"/> 
     <TOC xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:nil="true"/> 

I addierten folgende XSLT-Segment, das das Stammelement als Produkte umbenannt.

<xsl:template match="x:Standards"> 
    <Products namespace="{namespace-uri()}"> 
     <xsl:apply-templates select=".//x:Standard" /> 
    </Products> 
</xsl:template> 

Ist das korrekt? Wie kann ich das obige xslt ändern, um alle Null Werte von der Ausgabe zu beseitigen. Jede Hilfe wäre willkommen.

+0

_ "Ist das richtig" _ - - Hat es die von Ihnen erwartete Ausgabe produziert? Sie müssen nicht jede Änderung überprüfen, indem Sie hier eine Frage stellen. VERSUCH ES! Um Werte mit 'xsi: nil =" true "' zu eliminieren, wissen Sie, wie man eine passende Vorlage dafür schreibt, machen Sie die Vorlage einfach leer. –

+0

Ich habe die erwartete Ausgabe. Aber ich konnte diese Nullwerte noch nicht eliminieren. –

Antwort

1

die namesace Erklärung für xsi Ihrem Stylesheet hinzufügen

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 

eine Vorlage hinzufügen xsi:nil

<xsl:template match="@xsi:nil"/> 

zu ignorieren und Ihre xsl:copy-of-xsl:apply-templates ändern. Zum Beispiel:

<xsl:copy-of select="x:ProductID" /> 

zu:

<xsl:apply-templates select="x:ProductID" /> 

Update:
Um alle Knoten mit nil Attribut zu ignorieren versuchen:

<xsl:template match="*[@xsi:nil]"/> 
+0

Ich habe versucht, den vorgeschlagenen Ansatz, aber jetzt bekomme ich leere XML-Tags wie folgt. für keine Elemente. Voraussetzung ist, alle Nullknoten zu eliminieren. –

+0

Ja - ich dachte, das war was du erwartest. Aber Sounds wie du magst Element mit Null zu ignorieren nicht onyl das Null-Attribut –

+0

Vielen Dank für Ihre freundliche corporation.That arbeitete. Ich bin in einem engen Zeitplan, habe nicht genug Zeit, um zu experimentieren. Danke noch einmal. :) –