Python:解析XML自动添加所有键/值对

2024-09-28 03:16:24 发布

您现在位置:Python中文网/ 问答频道 /正文

我找了很久也试了很多!但我无法敞开心扉面对这个简单的场景。我需要说的是,我是一个python新手,但却是一个非常优秀的bash程序员;o)我用python编写了一些代码,但可能还有很多东西需要我去学习,所以不要对我太苛刻;o)我愿意学习,我阅读了python文档和许多示例,并且自己尝试了很多,但现在我处于一个黑暗的境地。。在

我解析以XML形式提供的内容。它大约有20-50MB大。 我的XML示例:

<MAIN>
  <NOSUBEL>abcd</NOSUBEL>
  <NOSUBEL2>adasdasa</NOSUBEL2>
  <MULTISUB>
    <WHATEVER>
      <ANOTHERSUBEL>
        <ANOTHERONE>
          (how many levels can not be said / can change)
        </ANOTHERONE>
      </ANOTHERSUBEL>
     </WHATEVER>
   </MULTISUB>..
   <SUBEL2>
     <FOO>abcdefg</FOO>
   </SUBEL2>
   <NOSUBEL3>abc</NOSUBEL3>
   ... 
   and so on 
</MAIN>

这是解析它的主要部分(如果您需要更多详细信息,请询问):

^{pr2}$

这只对1个子元素起作用,但这意味着我需要知道树中哪一个子元素有子元素,而哪些没有子元素。这可能会在将来发生变化或被添加。 另一个问题是MULTISUB。有了上面的代码,我只能解析到第一个标记。在

目标

我想要达到的目标充其量是:

A)有一个能够解析整个XML内容的函数/代码片段,如果有子元素(例如,使用“if len(x)”或其他任何元素),则解析到下一个级别,直到达到没有子元素/树的级别。然后转到B)

B)对于找到的每个没有子元素的XML标记,我想用标记名和标记文本更新字典。在

对于所有的子元素来说,

到目前为止,我试着把几个循环链起来,比如“for,while,for”,等等,但是没有什么是完全成功的。我还深入研究了python生成器,因为我认为可以用next()函数做些什么,但也无能为力。不过,我可能没有正确使用它们的知识,所以我对每个答案都很满意。。在

我相信我需要的东西很简单。我只想从标记名和标记内容中得到键值对,这不难吗?非常感谢任何帮助。。在

你能帮我达成目标吗?在

(感谢您在这里阅读!)在


Tags: 代码标记元素示例内容目标mainxml
1条回答
网友
1楼 · 发布于 2024-09-28 03:16:24

您要寻找的是recursion-一种在该过程内部运行某个过程的技术,但是对于原始问题的子问题。在本例中:要么对某个元素的每个子元素运行此过程(如果有子元素),要么用元素的标记名和文本更新字典。在

最后,我假设您对字典(^{})感兴趣,它包含整个元素树的叶子(没有子元素的节点)标记名/文本值的“平面表示法”,在您的例子中,打印出来的结果如下所示:

OrderedDict([('NOSUBEL', 'abcd'), ('NOSUBEL2', 'adasdasa'), ('ANOTHERONE', '(how many levels can not be said / can change)'), ('FOO', 'abcdefg'), ('NOSUBEL3', 'abc')])

通常,您将定义一个函数,该函数要么用部分数据调用自己(在本例中,如果有子元素的话),要么做一些事情(在本例中:更新dictionary的某个实例)。在

因为我不知道my.request调用背后的细节,所以我用从包含有效XML的字符串(基于您提供的XML)进行解析来代替它。只需替换构造tree对象。在

^{pr2}$

如您所见,我在代码中没有使用任何标记名(当然,除了XML源代码)。在

我还添加了从collections丢失的导入。在

相关问题 更多 >

    热门问题