读取 Python 中的 XML 个块
Read XML block in Python
我有一个如下所示的 XML 文件,其中包含多个 xml。我想获取 <Sacd>
内容。
<?xml version="1.0" encoding="utf-8"?>
<Sacd>
<Acdpktg> <Acdpktg/>
</Sacd>
<?xml version="1.0" encoding="utf-8"?>
<Sacd>
<Acdpktg/>
</Sacd>
<?xml version="1.0" encoding="utf-8"?>
<Sacd>
<AcdpktG>
<Result Value="0"/>
<Packet Value="Dnd"/>
<Invoke Value="abc"/>
</AcdpktG>
</Sacd>
如何提取 Sacd 标签内的值?
嗯,您的 xml 在几个方面都有问题。首先,它在其中包含多个 xml 文件——这不是个好主意;它们必须分成单独的 xml 个文件。二、第一个<Acdpktg> <Acdpktg/>
标签对无效;应该是 <Acdpktg> </Acdpktg>
.
但是一旦全部修复,您就可以获得预期的输出。所以:
from lxml import etree
big = """[your xml above,fixed]"""
smalls = big.replace('<?xml','xxx<?xml').split('xxx')[1:] #split it into small xml files
for small in smalls:
xml = bytes(bytearray(small, encoding='utf-8')) #either this, or remove the xml declarations from each small file
doc = etree.XML(xml)
for value in doc.xpath('.//AcdpktG//*/@Value'):
print(value)
输出:
0
Dnd
abc
或者,稍微改变内部 for
循环可以获得更漂亮的输出:
for value in doc.xpath('.//AcdpktG//*'):
print(value.tag, value.xpath('./@Value')[0])
输出:
Result 0
Packet Dnd
Invoke abc
我有一个如下所示的 XML 文件,其中包含多个 xml。我想获取 <Sacd>
内容。
<?xml version="1.0" encoding="utf-8"?>
<Sacd>
<Acdpktg> <Acdpktg/>
</Sacd>
<?xml version="1.0" encoding="utf-8"?>
<Sacd>
<Acdpktg/>
</Sacd>
<?xml version="1.0" encoding="utf-8"?>
<Sacd>
<AcdpktG>
<Result Value="0"/>
<Packet Value="Dnd"/>
<Invoke Value="abc"/>
</AcdpktG>
</Sacd>
如何提取 Sacd 标签内的值?
嗯,您的 xml 在几个方面都有问题。首先,它在其中包含多个 xml 文件——这不是个好主意;它们必须分成单独的 xml 个文件。二、第一个<Acdpktg> <Acdpktg/>
标签对无效;应该是 <Acdpktg> </Acdpktg>
.
但是一旦全部修复,您就可以获得预期的输出。所以:
from lxml import etree
big = """[your xml above,fixed]"""
smalls = big.replace('<?xml','xxx<?xml').split('xxx')[1:] #split it into small xml files
for small in smalls:
xml = bytes(bytearray(small, encoding='utf-8')) #either this, or remove the xml declarations from each small file
doc = etree.XML(xml)
for value in doc.xpath('.//AcdpktG//*/@Value'):
print(value)
输出:
0
Dnd
abc
或者,稍微改变内部 for
循环可以获得更漂亮的输出:
for value in doc.xpath('.//AcdpktG//*'):
print(value.tag, value.xpath('./@Value')[0])
输出:
Result 0
Packet Dnd
Invoke abc