如何在python中使用lxml处理XLink引用?

2024-05-01 21:23:10 发布

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

我被要求编写一些脚本来读入XML配置文件,这些配置文件可以自由地使用XLink来包含存储在多个文件中的XML。例如:

<Environment xlink:href="#{common.environment}" />

在(#{公共环境}是一个属性占位符,它首先被解析,在这里可以忽略。)该公司已经在lxml上对python中的高级XML处理进行了标准化。在

我一直在寻找如何在这些限制下处理这些事件的示例或文档,并且至少在父XML文档中包含它们的内容,就好像它们实际上是在此时插入的一样。我有点惊讶地发现珍稀的小东西,以至于我想知道我是否遗漏了一些显而易见的东西。我发现了关于XLink是什么的通用文档,并且找到了在XSLT处理上下文中使用它的一些示例。但这对我没什么帮助。在

有谁能就如何最好地实现这一点提供任何建议,不管是文档、示例还是来自经验的一些建议?谢谢。在

更新:下面是一个前后示例:

以前。这是正在解析的文件中的实际内容:

^{pr2}$

这是文件中的内容#{公共环境}决心:

<?xml version="1.0" encoding="UTF-8"?>
<Environment>
    <Property key="hello.world" value="foo" />
    <Property key="bar.baz" value="fred" />
</Environment>

之后。这是解析器在所有处理完成后“看到”它的方式:

<Root>
    <Environment>
        <Property key="hello.world" value="foo" />
        <Property key="bar.baz" value="fred" />
    </Environment>
</Root>

这是一个从根本上简化了的例子。在


Tags: 文件key文档示例内容helloworldenvironment
1条回答
网友
1楼 · 发布于 2024-05-01 21:23:10

也许这是你真正需要的答案。下面的小程序是我可以根据“彻底简化”的例子想出的。

from lxml import etree

parent = etree.parse("parent.xml").getroot()
penv = parent.xpath("Environment")

for e in penv:
    child = e.get("{http://www.w3.org/1999/xlink}href")
    c = etree.parse(child).getroot()
    parent.replace(e, c)

print etree.tostring(parent)

在父级.xml公司名称:

^{pr2}$

在子级.xml公司名称:

<Environment>
  <Property key="hello.world" value="foo" />
  <Property key="bar.baz" value="fred" />
</Environment>

当程序运行时,它输出:

<Root xmlns:xlink="http://www.w3.org/1999/xlink">
  <Environment>
  <Property key="hello.world" value="foo"/>
  <Property key="bar.baz" value="fred"/>
</Environment></Root>

相关问题 更多 >