3

我有一个 HTML,其中包含一些标签,如下所示:

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

如何使用 XPath 获取所有标签中text包含的所有 s ,而忽略字段?<div>span

IE:

text1  
text2  
textbase1text3  
textbase2text4   
4

4 回答 4

2

你可以简单地使用:

//div/text()

或者

div/text()

希望这可以帮助。

于 2012-06-10T13:15:33.793 回答
1

这不能用单个 XPath 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>

当此 XSLT 1.0 转换应用于以下 XML 文档(提供的 XML 片段,包装在单个顶部元素中)时:

<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
于 2012-06-10T14:45:07.060 回答
1

这是一个链接The lxml.etree Tutorial,并搜索Using XPath to find text
例如:

from lxml import etree 
html = """
<span class='demo'>
Hi, 
<span>Tom</span>
</span>

tree = etree.HTML(html)
node = tree.xpath('//span[@class="demo"]')[0]
print(node.xpath('string()')
于 2019-01-16T08:34:21.890 回答
0

如果 HTML 文件中没有其他内容,只有<div>通常的 HTML 根元素中的 s,则以下样式表足以提取文本:

<?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>
于 2012-06-10T13:36:41.693 回答