使用XSLT在选定的Span标记之前获取Text

时间:2014-03-03 10:15:53

标签: php xslt xpath

我有从外部URL获取HTML代码的代码。截取的代码段落如下。

$output = '<div align="center" class="style12">
Monday-Thursday 3-6 March<br/>
<span class="style21">Band XYZ</span><br/>
Friday 7 March<br/>
<span class="style21">Band PQR</span><br/>
Saturday 8 March<br/>
<span class="style21">Band ABC</span><br/>
Monday-Thursday 10-13 March<br/>
<span class="style21">Band UVW</span><br/>
Friday-Saturday 14-15 March<br/>
<span class="style21">Band MNO</span>
</div>
';

我试图从上面的字符串中获取日期和乐队名称,因为我使用的是XSLT和PHPDOM。这是我到目前为止的XSLT代码。

<xsl:for-each select="div/span">
        <xsl:variable name="band_name" select="." />
        <xsl:variable name="positions" select="position()+(position()-1)" />                                
        <xsl:variable name="raw_event_date" select="parent::div/text()[$positions]" /> 
</xsl:for-each>

当html格式正确时,这很有效,因此此代码仅提取少量事件日期。我想检索所有日期,以便我想做其他方式,比如在选定的span标记之前提取文本(不包括BR)。谁能对它有所启发?

由于

1 个答案:

答案 0 :(得分:1)

使用以下样式表:

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

<xsl:strip-space elements="*"/>

    <xsl:template match="/">
        <xsl:for-each select="div/span">
            <xsl:value-of select="preceding-sibling::text()[1]"/>
        </xsl:for-each>
    </xsl:template>

</xsl:stylesheet>

它产生:

Monday-Thursday 3-6 March
Friday 7 March
Saturday 8 March
Monday-Thursday 10-13 March
Friday-Saturday 14-15 March