如何使用lxml.etree添加多个SubElement? (蟒蛇)

时间:2017-05-20 12:44:58

标签: python-3.x elementtree

我想使用lxml.etree在一个带有多个子标签的主标签下写出几个SubElements。

这是我用来写出我的标签的代码。

def create_SubElement(_parent, _tag, attrib={}, _text=None, nsmap=None, **_extra):
    result = ET.SubElement(_parent, _tag, attrib, nsmap, **_extra)
    result.text = _text
    return result

这是我的代码,它有多个p_tags。

for key_products in primary_details:
    try:
        if 'Products' in key_products.h3.text:
            for p_tag in key_products.find_all('p'):
                products = create_SubElement(root, 'Products', _text=p_tag.text)

      except:
            continue

print (ET.tostring(root, pretty_print=True))

上面的代码当前产生了这个输出:

'<root>\n 
    <Products>product name 1 </Products>\n  
    <Products>product name 2 </Products>\n  
    <Products>product name 3 </Products>\n  
    <Products>product name 4 </Products>\n  
    <Products>product name 5 </Products>\n  
</root>\n'

所需的输出将是这样的:

'<root>\n 
    <Products>
      <ProductName>product name 1 </ProductName>\n  
      <ProductName>product name 2 </ProductName>\n  
      <ProductName>product name 3 </ProductName>\n  
      <ProductName>product name 4 </ProductName>\n  
      <ProductName>product name 5 </ProductName>\n 
   <Products> 
</root>\n'

1 个答案:

答案 0 :(得分:1)

您只需创建一次Products元素并使用ProductName创建多个Products元素作为父元素,如下所示:

....
if 'Products' in key_products.h3.text:
    # create Products element once:
    products = create_SubElement(root, 'Products')
    for p_tag in key_products.find_all('p'):
        # create ProductName element using Products as parent
        productName = create_SubElement(products, 'ProductName', _text=p_tag.text)