2012-06-10 47 views
1

我有一個包含類似下面的一些標籤一個HTML:的XPath忽略跨度

<div id="SNT">text1</div> 
<div id="SNT">text2</div> 
<div id="SNT">textbase1<span style='color: #EFFFFF'>text3</span></div> 
<div id="SNT">textbase2<span style='color: #EFFFFF'>text4</span></div> 

我怎樣才能納入所有<div>標籤所有text S使用XPath的,忽略了span領域?

即:

text1 
text2 
textbase1text3 
textbase2text4 
+0

所有的id都一樣嗎?你使用的是什麼xpath實現? –

+0

是的,我使用iOS的XPathQuery。 – MBZ

回答

0

這不能用單一的XPA指定th 1.0表達式。

您需要先選擇所有相關div元素:

//div[@id='SNT] 

然後爲每個選擇的節點得到的字符串節點

string(.) 

在XPath 2.0這可以用單個表達式指定

//div[@id='SNT]/string(.) 

XSLT - 基於驗證

<xsl:stylesheet version="1.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
<xsl:output method="text"/> 

<xsl:template match="div[@id='SNT']"> 
    <xsl:copy-of select="string()"/> 
========  
</xsl:template> 
</xsl:stylesheet> 

當在下面的XML文檔(提供的XML片段,包裹成一個單一的頂部元件)被施加這個XSLT 1.0轉化:

<t> 
    <div id="SNT">text1</div> 
    <div id="SNT">text2</div> 
    <div id="SNT">textbase1<span style='color: #EFFFFF'>text3</span></div> 
    <div id="SNT">textbase2<span style='color: #EFFFFF'>text4</span></div> 
</t> 

相關的div元素被選中(匹配)並由唯一指定的模板處理,在其中string(.)的XPath表達式,並將其結果被複制到輸出:

text1 
========  

    text2 
========  

    textbase1text3 
========  

    textbase2text4 
========  

而對於中的XPath 2。0表達

<xsl:stylesheet version="2.0" 
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
    <xsl:output method="text"/> 

<xsl:template match="/"> 
    <xsl:copy-of select="//div[@id='SNT']/string(.)"/> 
</xsl:template> 
</xsl:stylesheet> 

當該XSLT 2.0變換對相同的XML文檔(上圖),所述的XPath 2.0表達式求值並將結果(四根弦)施加被複制到輸出

text1 text2 textbase1text3 textbase2text4 
1

你可以簡單地使用:

//div/text() 

div/text() 

希望這有助於。

+0

這將使用'span'標籤爲每個'div'返回2個不同的字符串。 – MBZ

0

如果在HTML文件中,只是那些<div> S上的通常的HTML根元素中沒有其他內容,下面的樣式表將足以提取文本:

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

<xsl:output method="text"/> 

</xsl:stylesheet> 

如果你只想要<div> s,而只有那些特定的ID,使用下面的代碼 - 這也確保了分行都喜歡在你的榜樣:

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

<xsl:output method="text"/> 

<xsl:template match="//div[@id='SNT']"> 
    <xsl:copy-of select="node()|text()"/><xsl:text>&#xA;</xsl:text> 
</xsl:template> 

</xsl:stylesheet>