我有一个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
标记中的<div>
,忽略span
字段?
即:
text1
text2
textbase1text3
textbase2text4
答案 0 :(得分:2)
您可以使用:
//div/text()
或
div/text()
希望这有帮助。
答案 1 :(得分: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>
当对以下XML文档应用此XSLT 1.0转换时(提供的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>
当对同一XML文档(上面)应用此XSLT 2.0转换时,将评估XPath 2.0表达式并将结果(四个字符串)复制到输出:
text1 text2 textbase1text3 textbase2text4
答案 2 :(得分: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()')
答案 3 :(得分:0)
如果HTML文件中没有其他内容,只有通常的HTML根元素中的那些<div>
,则以下样式表就足以提取文本:
<?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>
,并且只需要使用这些特定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>
</xsl:text>
</xsl:template>
</xsl:stylesheet>