正在从解析的xml文本中提取值



我正在使用lxml解析以下XML文本块:

<block>{<block_content><argument_list>(<argument><expr><name><name>String</name><operator>.</operator><name>class</name></name></expr></argument>, <argument><expr><name><name>Object</name><operator>.</operator><name>class</name></name></expr></argument>)</argument_list></block_content>}</block> 
<block>{<block_content><argument_list>(<argument><expr><literal type="string">"Expected exception to be thrown"</literal></expr></argument>)</argument_list></block_content>}</block> 
<block>{<block_content></block_content>}</block> 

我的要求是从上面的xml片段中打印以下内容:

  1. String.class
  2. 对象.class
  3. "期望抛出异常">

基本上,我需要打印xml片段的argument节点中包含的文本值。

下面是我正在使用的代码块。

from lxml import etree
xml_text = '<unit>' 
'<block>{<block_content><argument_list>(<argument><expr><name><name>String</name><operator>.</operator><name>class</name></name></expr></argument>, <argument><expr><name><name>Object</name><operator>.</operator><name>class</name></name></expr></argument>)</argument_list></block_content>}</block> ' 
'<block>{<block_content><argument_list>(<argument><expr><literal type="string">"Expected exception to be thrown"</literal></expr></argument>)</argument_list></block_content>}</block> ' 
'<block>{<block_content></block_content>}</block>' 
'</unit>'
tree = etree.fromstring(xml_text)
args = tree.xpath('//argument_list/argument')
for i in range(len(args)):
print('%s. %s' %(i+1, etree.tostring(args[i]).decode("utf-8")))

但是,此代码生成的以下输出不符合我的要求。

1. <argument><expr><name><name>String</name><operator>.</operator><name>class</name></name></expr></argument>, 
2. <argument><expr><name><name>Object</name><operator>.</operator><name>class</name></name></expr></argument>)
3. <argument><expr><literal type="string">"Expected exception to be thrown"</literal></expr></argument>)

如果有人能指出我需要对我的代码进行哪些修改,我将不胜感激

我发现strip_tags函数可以完成任务。以下是更新后的代码:

for i in range(len(args)):
etree.strip_tags(args[i], "*")
print('%s. %s' %(i+1, args[i].text))

更新代码输出:

  1. String.class
  2. 对象.class
  3. "期望抛出异常">

最新更新