Python Xpath提取当前节点内容,包括所有子节点
提取当前节点内容(包括所有子节点)时遇到问题 就像下面的代码一样,我想得到字符串Python Xpath提取当前节点内容,包括所有子节点,python,xpath,lxml,Python,Xpath,Lxml,提取当前节点内容(包括所有子节点)时遇到问题 就像下面的代码一样,我想得到字符串 abcdefgb1b2b3 在预标记中 但是我不能用“child::*”来获取它。 如果使用“/text()”,则会丢失b标记格式信息。请帮帮我 # -*- coding: utf-8 -*- from lxml import html import lxml.etree as le input = "<pre>abcdefg<b>b1b2b3</b></pre>"
abcdefgb1b2b3
在预标记中
但是我不能用“child::*”来获取它。
如果使用“/text()”,则会丢失b标记格式信息。请帮帮我
# -*- coding: utf-8 -*-
from lxml import html
import lxml.etree as le
input = "<pre>abcdefg<b>b1b2b3</b></pre>"
input_xpath = "//pre/child::*"
tree = html.fromstring(input)
result = tree.xpath(input_xpath)
result1 = [le.tostring(item) for item in result]
result2 = ''.join(result1)
print result2
output: <b>b1b2b3</b>
#-*-编码:utf-8-*-
从lxml导入html
将lxml.etree作为le导入
输入=“abcdefgb1b2b3”
input_xpath=“//pre/child::*”
tree=html.fromstring(输入)
结果=tree.xpath(输入\ xpath)
结果1=[结果中项目的le.tostring(项目)]
结果2=''.join(结果1)
打印结果2
输出:b1b2b3
尝试用以下内容替换xpath
from lxml import html
import lxml.etree as le
input = "<pre>abcdefg<b>b1b2b3</b></pre>"
tree = html.fromstring(input)
node = tree.xpath("//pre")[0]
[0]中的:input=“abcdefgb1b2b3”
result = node.text + ''.join(le.tostring(e) for e in node)
print result
在[1]中:输入_xpath=“//pre//text()”
在[2]中:tree=html.fromstring(输入)
在[3]中:result=tree.xpath(input_xpath)
在[4]中:结果
Out[5]:['abcdefg','b1b2b3']
要获取XML节点的内容标记(有时称为),可以从选择节点开始(而不是选择子节点或文本内容):
输出:
abcdefgb1b2b3
这对我来说很难。我不知道如何用lxml解决您的问题。@TonyYang供您参考,请检查下面的答案和链接的问题,寻找可能的解决方法。实际上,这不是我想要的。因为b1b2b3丢失了标签信息,我认为这不是一个好答案。如果输入是字符串的“b1b2b3abcdefg”,你会怎么做?你会使用result=''.join(le.tostring(e)表示节点中的e)+node.text来回答我吗?@TonyYang令人惊讶的是,代码几乎也适用于这种情况。这种情况下唯一的问题是节点。Text
返回None
,因此它不能与字符串组合。添加None
检查为我生成预期结果:node.text如果node.text其他“”+“”.join(le.tostring(e)表示节点中的e)
result = node.text + ''.join(le.tostring(e) for e in node)
print result
abcdefg<b>b1b2b3</b>