【发布时间】:2019-10-14 05:59:17
【问题描述】:
我想在另一个 XML 文件中包含一个 XML 文件并用 python 解析它。我正在尝试通过 Xinclude 来实现它。有一个 file1.xml 看起来像
<?xml version="1.0"?>
<root>
<document xmlns:xi="http://www.w3.org/2001/XInclude">
<xi:include href="file2.xml" parse="xml" />
</document>
<test>some text</test>
</root>
和 file2.xml 看起来像
<para>This is a paragraph.</para>
现在在我的 python 代码中,我尝试像这样访问它:
from xml.etree import ElementTree, ElementInclude
tree = ElementTree.parse("file1.xml")
root = tree.getroot()
for child in root.getchildren():
print child.tag
它打印根的所有子元素的标签
document
test
现在当我尝试直接打印子对象时
print root.document
print root.test
它说根没有名为 test 或 document 的子级。那我应该如何访问 file2.xml 中的内容呢?
我知道我可以使用以下模式从 python 访问 XML 元素:
schema=etree.XMLSchema(objectify.fromstring(configSchema))
xmlParser = objectify.makeparser(schema = schema)
cfg = objectify.fromstring(xmlContents, xmlParser)
print cfg.elemetName # access element
但由于这里一个 XML 文件包含在另一个中,我很困惑如何编写架构。我该如何解决?
【问题讨论】:
-
我想从 python 解析这个 XML。我可以在没有架构的情况下解析它吗?
-
您不需要架构。您确实需要一个可以处理 XInclude 的工具或库。 lxml 可以做到:lxml.de/api.html#xinclude-and-elementinclude.
-
ElementTree 也有一些 XInclude 支持:docs.python.org/3/library/…
-
我正在浏览那个文件。但是我怎样才能访问包含文件中的内容呢?在那里给出的示例中,当我尝试访问 root.para 时,它说对象没有属性 para。但是 para 是包含的 xml 中元素的名称。
标签: python xml schema elementtree xinclude