2016-06-20 11 views
0

Ich habe ein XML von einem unserer "Legacy" -Systeme. Ich möchte das ExtLineNum-Tag entfernen, aber es befindet sich nicht im Stammverzeichnis.Entfernen Sie XML-Tag auf einem Unterknoten

Ich habe den XML-Code für mein Beispiel gestrippt:

<?xml version="1.0" encoding="utf-8"?><ns0:Envelope xmlns:ns0="http://schemas.microsoft.com/dynamics/2008/01/documents/Message"><ns0:Header><ns0:MessageId>{F2BCADA1-AC26-4A0C-BA44-11D75E249150}</ns0:MessageId><ns0:SourceEndpointUser>du.msad\btshostinstance</ns0:SourceEndpointUser><ns0:SourceEndpoint>EDI</ns0:SourceEndpoint><ns0:DestinationEndpoint>JWR</ns0:DestinationEndpoint><ns0:Action>http://schemas.microsoft.com/dynamics/2008/01/services/SalesOrderService/create</ns0:Action><ns0:ConversationId /><ns0:RequestMessageId /></ns0:Header><ns0:Body><ns0:MessageParts><SalesOrder xmlns="http://schemas.microsoft.com/dynamics/2008/01/documents/SalesOrder" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> 
    <SalesTable class="entity"> 
    <ActionCode></ActionCode> 
    <SalesLine class="entity"> 
     <ExtLineNum></ExtLineNum> 
    </SalesLine> 
    </SalesTable> 
</SalesOrder></ns0:MessageParts></ns0:Body></ns0:Envelope> 

Ich habe versucht:

<xsl:stylesheet version="1.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
<xsl:output omit-xml-declaration="yes" indent="yes"/> 

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

<xsl:template match="ExtLineNum"/> 

</xsl:stylesheet> 

Aber das hat nicht geklappt .. Denken, es ist eine einfache Frage, aber ich kann Ich finde die Antwort nicht?

Dank im Voraus,

Mike

+0

Was war das Ergebnis der Aktion, die Sie versucht? –

+0

Hallo Wilko, Quelle: Ergebnis: nicht 'touch' den Tag denke ich? –

+1

Siehe: http://stackoverflow.com/questions/34758492/xslt-transform-doesnt-work-until-i-remove-root-node/34762628#34762628 –

Antwort

-1

Versuchen den übergeordneten Knoten und Überspringen der inneren Knoten mit Knoten-nam 'ExtLineNum' übereinstimmt, gefunden

<xsl:template match="SalesLine"> 
    <xsl:copy-of select="*[node-name() != 'ExtLineNum']" /> 
</xsl:template> 
+0

Dies ist keine gute Antwort, in mehreren Punkten: (a) die Syntax ist ungültig; (b) es wird nicht funktionieren, weil die Vorlage nichts zutrifft; (c) Die Grundidee, den Namensraum zu ignorieren, ist schlecht. –

1

Dank der durch Michael vorgesehen link. hor257k Ich habe die korrekte Namensraum-Syntax gefunden:

<xsl:stylesheet version="1.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
xmlns:met="http://schemas.microsoft.com/dynamics/2008/01/documents/SalesOrder" 
exclude-result-prefixes="met"> 

<xsl:output omit-xml-declaration="yes" indent="yes"/> 

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

<xsl:template match="met:SalesOrder/met:SalesTable/met:SalesLine/met:ExtLineNum"/> 
</xsl:stylesheet> 

Thnx Jungs für Ihre Hilfe!

Mit freundlichen Grüßen

Mike

+1

'' sollte ziemlich ausreichend sein (ein Übereinstimmungsmuster ist nicht dasselbe wie ein select-Ausdruck). –

Verwandte Themen