0

好的,这是我目前的情况:

我对 XML 或 lxml 的了解还不是很好,因为到目前为止我很少使用 XML 文件。所以请告诉我我的方法是否真的很愚蠢。;-)

我想使用 Wordpress 导入器为我的 Wordpress 安装提供自定义 XML 文件。默认格式可以在这里看到:XML文件

现在有一些标签看起来像这样

<wp:author>

我不是百分百肯定,但据我今天所知, wp: 标记的一部分是命名空间。

当我尝试使用 lxml 创建这些标签时,我这样做了

author = etree.Element("wp:author")

这导致了一个错误,因为我不允许写 wp:author,而只能写 author。我使用了谷歌,查看了 lxml 网站,并想出了这个:

WP = ElementMaker(namespace="http://wordpress.org/export/1.2/",
                  "nsmap={'wp' : "http://wordpress.org/export/1.2/"})
author = WP("author")

输出:

<wp:author xmlns:wp="http://wordpress.org/export/1.2/"/>

嗯,更好。正如我今天所学到的,xmlns:wp 属于命名空间的东西。但我不希望出现 xmlns:wp 的东西,因为它不在他们的 XML 文件中。我查看了 Wordpress 本身如何导出他们的内容,他们这样做是这样的:

echo '<wp:author_id>' . $author->ID . '</wp:author_id>';

现在我的问题是,像他们一样做同样的事情会更好,还是我应该坚持使用 lxml,只要有办法在没有 xmlns:wp 的情况下获取标签?使用 lxml 创建 XML 文件似乎是更好的方法,因为它似乎(通常)很容易并且更易于阅读。

我已经尝试过 objectify.deannotate、cleanup_namespace 和类似的建议,但所有这些都不起作用。我希望你们中的一些人有答案,或者建议使用 lxml 解决我的问题,或者说,最好按照 Wordpress 人的方式来做!

如果我忽略了一个已经回答的类似问题,我真的很抱歉,请告诉我。

谢谢你

4

1 回答 1

2

这是我的建议:从 lxml 退后一步,考虑一下 python 对 xml 处理的内置支持:一个名为 xml.etree.ElementTree 的模块。像这样在 repl 中导入它:

import xml.etree.ElementTree as ET

和它玩一会儿。这是关于模块的一个很好的 python 文档:http: //goo.gl/8FVto

构建一个元素就这么简单:

a = ET.Element('wp:author')
ET.dump(a)

然后添加一些子元素。这一切都在文档中。

于 2013-10-19T05:41:08.653 回答