2017-11-28 3 views
0

Während meiner XSL-Transformation möchte ich alle Tags mit ContextID = "de_DE" löschen. Dies bedeutet, dass die folgende XML:Entfernen bestimmter Werte in einem XML-Element mit XSLT?

<Values>  
<Value AttributeID="TEST" ContextID="de_DE" QualifierID="de">1234</Value>   
<Value AttributeID="TEST" ContextID="fr_FR" QualifierID="fr">1234</Value>   
<Value AttributeID="TEST100" ContextID="de_DE" QualifierID="de">abcd</Value>   
<Value AttributeID="TEST100" ContextID="fr_FR" QualifierID="fr">abcd</Value>   
</Values> 

geworden:

<Values>   
<Value AttributeID="TEST" ContextID="fr_FR" QualifierID="fr">1234</Value> 
<Value AttributeID="TEST100" ContextID="fr_FR" QualifierID="fr">abcd</Value>   
</Values> 

Wie kann ich das erreichen?

Vielen Dank im Voraus!

Antwort

0

XSLT hat keine Vorstellung von "Löschung". Sie schließen Knoten aus dem Eingabedokument aus, indem Sie sie abgleichen und nichts mit ihnen tun. XSLT-Prozessoren haben eine Vorstellung von Spezifität, so dass eine spezifischere Vorlage eine weniger spezifische überschreibt.

Etwas wie:

<!-- Matches all Value elements and copies them verbatim --> 
<xsl:template match="Value"> 
    <xsl:copy/> 
</xsl:template> 

<!-- Matches all Value elements whose ContextID is 'de_DE' in preference to the less-specific template, and does nothing --> 
<xsl:template match="Value[@ContextID='de_DE']"/> 
+0

Eine flache Kopie mit 'xsl: copy' nicht die Elemente mit ihren Attributen kopiert, wie das Plakat so will, während die leere Druckvorlage für diese Elemente entfernt werden, ist in Ordnung die anderen Vorlagen muss verbessert werden oder vielleicht einfach durch die Identitätstransformationsvorlage ersetzt werden. –

+0

@MartinHonnen oops, gut entdeckt. Ja, ein '' wäre vorzuziehen, wenn das OP bereits eine Identitätstransformation eingerichtet hat. –

Verwandte Themen