python - 我应该如何在 python 中使用 lxml 处理 XLink 引用?

标签 python lxml xlink

我被要求编写一些读取 XML 配置文件的脚本,这些文件充分利用 XLink 来包含存储在多个文件中的 XML。例如:

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

(#{common.environment} 是首先解析的属性占位符,此处可以忽略。)该公司已对 lxml 进行了标准化,以便在 python 中进行高级 XML 处理。

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

任何人都可以就如何最好地实现这一点提供任何建议,无论是文档、示例还是只是一些经验建议?谢谢。

更新:这是前后示例:

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

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

这就是 #{common.environment} 解析为的文件中的内容:

<?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>

这是一个极其简化的示例,说明了其中发生的情况。

最佳答案

这个答案可能与您真正需要的相去甚远,但也许它可以提供一些帮助。下面的小程序是我根据“彻底简化”的示例想出的。

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)

parent.xml:

<Root xmlns:xlink="http://www.w3.org/1999/xlink">
  <Environment xlink:href="child.xml"/>
</Root>

child.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>

关于python - 我应该如何在 python 中使用 lxml 处理 XLink 引用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10820351/

相关文章:

javascript - 在 JavaScript 中动态创建 SVG 链接

java - 贾克斯布 + Jersey 。如何解码多个命名空间

XML:如何将一个 xml 文件的内容加载到另一个文件中

python - 我的模型的训练/验证准确性表现得很奇怪

python - 根据关闭日期时间属性对对象列表进行分组

python - 用户提交博客文章后重定向到主页?

Python 脚本无缘无故卡住 (afaik)

python - 如何分两个阶段进行 xpath 搜索?

python - lxml.etree.relaxng 返回 DocumentInvalid 而不记录错误的原因可能是什么?

Python:NULL 字节或控制字符