我有三种节点类型:无类别,有一个类别和多个类别:
JObject json = JObject.Parse(firebaseResponse.Body);
我想从<technology>
<categories>
<category></category>
</categories>
<name></name>
</technologie>
<technology>
<name></name>
</technologie>
<technology>
<categories>
<category></category>
<category></category>
<category></category>
</categories>
<name></name>
</technologie>
节点写入数据,例如:
我尝试了类似technology
或//technology/*[descendant::category]
的操作-但是我无法获得空行,如果//technology/categories/category[1]
不存在,则会写入所有现有类别一对一。
我如何以描述的方式写入数据?
答案 0 :(得分:1)
我不知道这是您要遵循的方向,但是FWIW,您可以使用lxml处理它。如果您的代码是:
snip = """
<technology>
<categories>
<category>Cat-A</category>
</categories>
<name>Nam-1</name>
</technology>
<technology>
<name>Nam-2</name>
</technology>
<technology>
<categories>
<category>Cat-B</category>
<category>Cat-C</category>
<category>Cat-D</category>
</categories>
<name></name>
</technology>
"""
您可以使用:
from lxml import etree
tree = lxml.etree.fromstring(snip, parser=lxml.etree.HTMLParser())
results = tree.xpath("*//technology")
for result in results:
for j in result.getchildren():
if j.tag == 'categories':
for m in j.itertext():
if m.strip() != '':
print(m)
break
break
else:
print('none')
break
输出:
Cat-A
none
Cat-B