我想使用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'
答案 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)