我找了很久也试了很多!但我无法敞开心扉面对这个简单的场景。我需要说的是,我是一个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()函数做些什么,但也无能为力。不过,我可能没有正确使用它们的知识,所以我对每个答案都很满意。。在
我相信我需要的东西很简单。我只想从标记名和标记内容中得到键值对,这不难吗?非常感谢任何帮助。。在
你能帮我达成目标吗?在
(感谢您在这里阅读!)在
您要寻找的是recursion-一种在该过程内部运行某个过程的技术,但是对于原始问题的子问题。在本例中:要么对某个元素的每个子元素运行此过程(如果有子元素),要么用元素的标记名和文本更新字典。在
最后,我假设您对字典(^{} )感兴趣,它包含整个元素树的叶子(没有子元素的节点)标记名/文本值的“平面表示法”,在您的例子中,打印出来的结果如下所示:
通常,您将定义一个函数,该函数要么用部分数据调用自己(在本例中,如果有子元素的话),要么做一些事情(在本例中:更新dictionary的某个实例)。在
因为我不知道
^{pr2}$my.request
调用背后的细节,所以我用从包含有效XML的字符串(基于您提供的XML)进行解析来代替它。只需替换构造tree
对象。在如您所见,我在代码中没有使用任何标记名(当然,除了XML源代码)。在
我还添加了从
collections
丢失的导入。在相关问题 更多 >
编程相关推荐