2012-03-28 2 views
1

У меня есть XML-файл и имеющие данныеполучить весь текст elemets с использованием XSLT irespective тегов

<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> 

и я хочу, чтобы получить весь текст из этого файла с помощью XSLT независимо от элементов и тегов , есть что-то получить. я попытался это, чтобы получить текст всех элементов в источнике

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

Обратите внимание: ваш XML не очень хорошо сформирован. Вам нужен корневой элемент, который завершает образец, который вы предоставили. – GeoGriffin

+1

Ваша попытка использовать normalize-space() выглядит корректно для меня. Каким образом выход отличается от того, что вы ищете? –

+0

фактически работает в автономном приложении, но если я пытаюсь настроить его в основном приложении, то только первая строка XSLT считывается синтаксическим анализатором, и результат не получается. – Librak

ответ

0

Вам нужно что-то похожее на тождественное преобразование.
Идентичность в этом контексте относится к математическому свойству функции, возвращающей копию ее ввода
например.
х - 0 = х
у * 1 = у

См http://www.usingxml.com/Transforms/XslIdentity

Вам может понадобиться настроить таблицу стилей идентичности, чтобы предотвратить его получения тегов и атрибутов.

1

Я думаю, что вы хотите что-то вроде ...

<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> 

К сожалению ... Я неправильно вопрос ... Это шаблон дает вам копию XML ... Этот шаблон будет вырезать разметку и просто дайте вам 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

Применение:

string(/) 

Или использовать:

normalize-space(/) 

Оценка первое выражение XPath выше производит строковое значение узла документа - по определению это конкатенация (в порядке документа) всех текстовые узлы в документе XML.

Оценка второго выражения XPath выше дает такое же строковое значение, из которого были удалены все символы верхнего и нижнего пробелов, а все промежуточные последовательности символов пробела заменены на одно пространство.

Смежные вопросы