检查ElementTree的每个值

问题描述:

我在Python中用ElementTree解析XML,并且必须检查树中的每个浮点数是否都带有“,”而不是“。”。但我不知道如何到达我的树的每个孩子,这是从一个+ 100K行的XML创建非常大。检查ElementTree的每个值

这是一个很短的样品,不过:

<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

请编辑您的问题以包含您的示例,而不是在评论中回答。你还可以向我们展示你迄今为止的尝试吗? –

+0

好吧..我进入了算法,以达到我的树的每个价值,但我不知道它是否是好主意,因为它的能量vore ..也许东西已经存在 –

通过ElementTree我们可以在下面的方式做:

  1. 创建的xml.etree.ElementTree.Element根对象。
  2. 通过getiterator()方法从输入中遍历每个元素。
  3. 使用re检查文本是由. or ,分开的数字。
  4. 如果是,则添加到结果列表。
  5. 显示结果列表。

演示:

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

注:

  1. 这是基本的代码,你可以根据你的算法条件进行修改。使用lxml库来解析xml数据。
  2. 做必要的异常处理。
+0

谢谢你的答案!所以它确实适用于这个小树,但我的方式更大更困难,所以它不起作用。我想我必须浏览我树的每个值才能做到这一点。我为什么要用'lxml'?我正在与工业规范合作,要求我使用'ElementTree' –

+0

nope,它也适用于大文档。大文档的脚本失败了吗? 'lxml'比'ElementTree'更加强大' –

+0

它对我说: '回溯(最近的通话最后): 文件“VerifReports。py“,第89行,在 element_value = element.text.strip() AttributeError:'NoneType'对象没有属性'strip'' –