2012-03-28 3 views
1

ich eine XML-Datei haben und mit Datenerhalten den gesamten Text von elemets XSLT mit irespective der Tags

<text> 
    <DIV style="TEXT-ALIGN: left; LINE-HEIGHT: 120%; FONT-SIZE: 10pt; PADDING-TOP: 14px"> 
    <FONT style="FONT-STYLE: italic; FONT-FAMILY: inherit; FONT-SIZE: 10pt; FONT-WEIGHT: bold"> 
    Spondon adsfa dtewr qewr qerm</FONT></DIV> 

     <DIV style="TEXT-ALIGN: left; LINE-HEIGHT: 120%; FONT-SIZE: 10pt"> 
     <FONT style="FONT-FAMILY: inherit; FONT-SIZE: 10pt"><BR/></FONT> 
     </DIV> 
     <DIV style="TEXT-ALIGN: left; LINE-HEIGHT: 120%; FONT-SIZE: 10pt"> 
     <FONT style="FONT-FAMILY: inherit; FONT-SIZE: 10pt"> 
     fhretwe rtwer dfsdfhfgh dfgh dfg sfgh sfg sfg citis with anticipated industry demand trends. Accordingly, in March 2010, the 
     Company recorded long-lived asset impairment losses of </FONT> 
     <FONT style="FONT-FAMILY: inherit; COLOR: #000000; FONT-SIZE: 10pt; TEXT-DECORATION: none"> 
     $72 million</FONT> 
     <FONT style="FONT-FAMILY: inherit; FONT-SIZE: 10pt"> 
     (Note13)to Other (charges) gains, net in the unaudited interim 
     consolidated statements of operations. The Spondon, Derby, United Kingdom 
     operations are included in the Consumer Specialties segment.</FONT></DIV></text> 

, und ich will den gesamten Text aus dieser Datei erhalten, die mit Hilfe von XSLT unabhängig von den Elementen und Tags . gibt es etwas, das zu bekommen. Ich habe versucht, dies den Text aller Elemente in der Quelle zu bekommen

<xsl:template match="/"> 
     <xsl:value-of select="normalize-space()"/> 
</xsl:template> 
+0

Bitte beachten Sie, dass Ihre XML nicht gut gebildet ist. Sie benötigen ein Root-Element, das das von Ihnen bereitgestellte Sample umschließt. – GeoGriffin

+1

Ihr Versuch mit normalize-space() sieht für mich korrekt aus. Inwiefern unterscheidet sich die Ausgabe von dem, wonach Sie suchen? –

+0

eigentlich funktioniert es in der Standalone-App, aber wenn ich versuche, es in der Haupt-App zu konfigurieren, nur die erste Zeile der XSLT wird vom Parser readed und die Ausgabe wird nicht produziert – Librak

Antwort

0

Sie brauchen etwas, ähnlich wie eine Identitätstransformation.
Identität bezieht sich in diesem Zusammenhang auf die mathematische Eigenschaft einer Funktion, die eine Kopie ihrer Eingabe zurückgibt, z. B.
.
x - 0 = x
y * 1 = y

Siehe http://www.usingxml.com/Transforms/XslIdentity

Sie müssen möglicherweise die Identität Sheet zwicken, um zu verhindern Tags und Attribute zu erzeugen.

1

Ich glaube, Sie wollen etwas wie ...

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
    <xsl:template match="@*|node()"> 
    <xsl:copy> 
     <xsl:apply-templates select="@*|node()"/> 
    </xsl:copy> 
    </xsl:template> 
</xsl:stylesheet> 

Sorry ... ich die Frage falsch verstanden ... Das Vorlage gibt Ihnen eine Kopie des XML ... Diese Vorlage das Markup Streifen aus wird und geben Sie nur die PCDATA.

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
    <xsl:output method="text" indent="yes" omit-xml-declaration="yes"/> 
    <xsl:template match="@*|node()"> 
     <xsl:value-of select="."/> 
     <xsl:apply-templates />  
    </xsl:template> 
</xsl:stylesheet> 
1

Verwenden:

string(/) 

Nutzen:

normalize-space(/) 

Auswerten des ersten XPath-Ausdruck oben erzeugt das Zeichenkettenwert des Dokuments node - definitions Dies ist die Verkettung (in der Reihenfolge der Dokumente) von allen Textknoten im XML-Dokument.

Auswerten des zweiten XPath-Ausdrucks über erzeugt den gleichen Zeichenfolgenwert, bei dem alle führenden und nachfolgenden Leerzeichen entfernt und alle Zwischenfolgen von Leerzeichen durch ein einzelnes Leerzeichen ersetzt wurden.

Verwandte Themen