检查ElementTree的每个值

时间:2017-04-25 07:09:40

标签: python xml parsing elementtree

我正在使用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)

1 个答案:

答案 0 :(得分:0)

我们可以通过以下方式执行ElementTree

  1. 创建xml.etree.ElementTree.Element
  2. 的根对象
  3. 通过getiterator()方法迭代输入中的每个元素。
  4. 使用re检查文字是由. or ,分隔的号码。
  5. 如果是,则添加到结果列表。
  6. 显示结果列表。
  7. <强>演示:

    >>> 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. 这是基本代码,您可以根据您的算法条件进行修改。
    2. 使用lxml库来解析xml数据。
    3. 进行必要的异常处理。