【问题标题】:Writing a custom XML file for the Wordpress Importer using lxml使用 lxml 为 Wordpress 导入器编写自定义 XML 文件
【发布时间】:2025-12-07 17:30:01
【问题描述】:

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

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

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

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

<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 本身如何导出他们的内容,他们这样做就像this

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

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

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

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

谢谢 韦洛

【问题讨论】:

    标签: python xml wordpress lxml


    【解决方案1】:

    这是我的建议:从 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)
    

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

    【讨论】:

    • 太好了,谢谢你,这很好用。 :-) 我开始使用 google what to use for xml generation and lxml 出现了,所以我不知何故只是跳过了内置的 xml 模块。 :(
    最近更新 更多