2017-07-27 1 views
0

Ich muss die folgende Umwandlung durchführen, um eine Nachricht durch einen Integrationsbroker zu bekommen, der xsi:nil=“true” nicht versteht. Ich weiß, dass für Strings mit etwas wie <abc></abc> ist nicht das gleiche wie <abc xsi:nil=“true”/>, aber ich habe keine Option.Ersetze xsi: nil = "true" mit offenen und schließenden Tags

Meine XML-Eingabe:

<PART> 
<LENGTH_UOM xsi:nil="1"/> 
      <WIDTH xsi:nil="1"/> 
</PART> 

Erwartete Ergebnisse:

<PART> 
    <LENGTH_UOM><LENGTH_UOM> 
    <WIDTH></WIDTH> 
</PART> 

Bitte teilen Sie mir Ihre Anregungen wissen.

+0

Sie versuchen, alle Attribute für alle Elemente loszuwerden? –

Antwort

1

So entfernen Sie alle xsi:nil Attribute die -Identity-Vorlage mit einer leeren Vorlage passende xsi:nil kombinieren.

<?xml version="1.0" encoding="UTF-8"?> 
<xsl:stylesheet version="1.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:xsi="http://xsi.com">  
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/> 

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

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

</xsl:stylesheet> 

Wenn Sie nur diejenigen, deren Wert entfernen möchten ist true stattdessen die folgende leere Vorlage verwenden.

<xsl:template match="@xsi:nil[.='1' or .='true']" /> 

über die Eröffnung und Tag-Thema Schließung I suggest reading this SO question, in dem Martin Honnen besagt, dass (in den Kommentaren der Antwort):

fürchte ich, ob ein leeres Element als markiert ist oder oder ist etwas, das mit XML wichtig ist und normalerweise nicht mit XSLT-Prozessoren gesteuert werden kann.

Verwandte Themen