我正在使用python中的ElementTree解析XML,我必须检查树中的每个浮点数是否都是“,”而不是“。”但是我不知道我的树的每个孩子是如何达到的,这是从+ 100K的xml线创建的那么大。
这是一个非常简短的样本,但是:
<example tr="3,1">
<test>2.1</test>
<stack>
<nb>2,5</nb>
<nb>5.1</nb>
</stack>
</example>
我想检查浮动的任何值是否带有逗号或点。我的问题是用任何树来达到树的每个值。
到目前为止,我试过这个:
tree = ET.parse(chemin, parser=LineNumberingParser())
root = tree.getroot()
float_text_info = []
for element in root.getiterator():
if element is not None:
element_value = element.text.strip()
if element_value and re.findall('\d+[\.|,]\d+', element_value):
float_text_info.append(element_value)
答案 0 :(得分:0)
我们可以通过以下方式执行ElementTree
:
xml.etree.ElementTree.Element
。getiterator()
方法迭代输入中的每个元素。re
检查文字是由. or ,
分隔的号码。<强>演示:强>
>>> data = """
... <example tr="3,1">
... <test>2.1</test>
... <stack>
... <nb>2,5</nb>
... <nb>5.1</nb>
... </stack>
... </example> """
>>>
>>>
>>> import xml.etree.ElementTree as PARSER
>>> import re
>>>
... root = PARSER.fromstring(data)
>>>
>>> float_text_info = []
>>> for element in root.getiterator():
... element_value = element.text.strip()
... if element_value and re.findall('\d+[\.|,]\d+', element_value):
... float_text_info.append(element_value)
...
...
>>> print "float_text_info:", float_text_info
float_text_info: ['2.1', '2,5', '5.1']
在XML中有注释时执行异常处理。
try:
element_value = element.text.strip()
except:
continue
或者:
最好检查元素是否为无。
for element in root.getiterator():
if element is not None and element.text is not None:
element_value = element.text.strip()
if element_value and re.findall('\d+[\.|,]\d+', element_value):
float_text_info.append(element_value)
注意:强>
lxml
库来解析xml数据。