2012-06-10 48 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>