无论标签如何,都可以使用XSLT获取元素的所有文本

时间:2012-03-28 16:12:42

标签: html xml xslt xslt-1.0

我有一个XML文件并且有数据

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

3 个答案:

答案 0 :(得分: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 :(得分:1)

使用

string(/)

或使用

normalize-space(/)

评估上面的第一个XPath表达式会生成文档节点的字符串值 - 根据定义,这是XML文档中所有文本节点的串联(按文档顺序)。

评估上面的第二个XPath表达式会产生相同的字符串值,从中删除所有前导和尾随空白字符,并且所有中间空白字符序列都被单个字符替换空间。

答案 2 :(得分:0)

您需要类似于身份转换的内容 此上下文中的标识是指返回其输入副本的函数的数学属性 例如
x - 0 = x
y * 1 = y

请参阅http://www.usingxml.com/Transforms/XslIdentity

您可能需要调整标识样式表以防止它生成标记和属性。