2017-02-06 4 views
-1

Ich habe eine xml wie diese,XSLT - Wählen Sie Inhalt zwischen zwei Sonderzeichen

<doc> 
    <p>text1 &lt;xml version="1.0" encoding="UTF-16" 
     standalone="yes"?&gt; text2</p> 
</doc> 

Ich brauche den Textinhalt zwischen &lt; and &gt; Form über Text mit XSLT zu entfernen. So erwartete Ausgabe ist,

<doc> 
    <p>text1 text2</p> 
</doc> 

Ich versuchte Regex zu verwenden, aber ich frage mich, wie ich Text zwischen &lt; and &gt; Form regex fangen kann.

Irgendeine Idee, wie ich das mit XSLT tun kann?

Antwort

1

Dies sollte funktionieren.

(&lt;(?:.?\n?)*&gt;) 

Dann Ersetzen durch "" (leer)

Eingang:

<doc> 
    <p>text1 &lt;xml version="1.0" encoding="UTF-16" 
     standalone="yes"?&gt; text2</p> 
</doc> 

Ausgang:

<doc> 
    <p>text1 text2</p> 
</doc> 

See: https://regex101.com/r/0o9hol/1

1

Mit nur XSLT-1.0 Sie kann achi Vorabend dies durch die folgende Vorlage Anwendung:

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

    <xsl:template match="p"> 
    <xsl:value-of select="concat(normalize-space(substring-before(text(), '&lt;')),' ',normalize-space(substring-after(text(), '&gt;')))" /> 
    </xsl:template> 

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

</xsl:stylesheet> 

Diese Vorlage nur kopiert alle Knoten mit der -Identity-Vorlage und wendet eine spezielle Behandlung für alle <p> Elemente.

Die spezielle Behandlung der <p> Knoten extrahiert die text() Knoten vor und nach &lt;&gt; während des space Zeichenauftritt Normalisieren (ihre Zählung zu einer Verringerung) und verkettet das Ergebnis.

Das ist alles.

Verwandte Themen