python - lxml xsi :schemaLocation namespace URI validation issue

标签 python xml lxml xml-namespaces cda

我正在尝试使用 lxml.etree 重现 CDA QuickStart Guide found here 中的 CDA 示例.

特别是,我在尝试重新创建此元素时遇到了命名空间问题。

<ClinicalDocument xmlns="urn:hl7-org:v3" xmlns:mif="urn:hl7-org:v3/mif" 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xsi:schemaLocation="urn:hl7-org:v3 CDA.xsd">

我使用的代码如下

root = etree.Element('ClinicalDocument',
                    nsmap={None: 'urn:hl7-org:v3',
                           'mif': 'urn:hl7-org:v3/mif',
                           'xsi': 'http://www.w3.org/2001/XMLSchema-instance',
                           '{http://www.w3.org/2001/XMLSchema-instance}schemaLocation': 'urn:hl7-org:v3 CDA.xsd'})

问题出在 nsmap 中的 schemaLocation 条目。 lxml 似乎在尝试验证值并给出错误

ValueError: Invalid namespace URI u'urn:hl7-org:v3 CDA.xsd'

我是否错误地指定了 schemaLocation 值?有没有办法强制 lxml 接受任何字符串值?或者示例中的值只是作为一个占位符,我应该将其替换为其他内容?

最佳答案

nsmap 是前缀到 namespace URI 的映射。 urn:hl7-org:v3 CDA.xsdxsi:schemaLocation 属性的有效值,但它不是有效的命名空间 URI。

类似问题的解决方案,How to include the namespaces into a xml file using lxmf? ,也在这里工作。使用 QName 创建 xsi:schemaLocation 属性。

from lxml import etree

attr_qname = etree.QName("http://www.w3.org/2001/XMLSchema-instance", "schemaLocation")

root = etree.Element('ClinicalDocument',
                     {attr_qname: 'urn:hl7-org:v3 CDA.xsd'},
                     nsmap={None: 'urn:hl7-org:v3',
                            'mif': 'urn:hl7-org:v3/mif',
                            'xsi': 'http://www.w3.org/2001/XMLSchema-instance',
                            })

关于python - lxml xsi :schemaLocation namespace URI validation issue,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39619046/

相关文章:

java - Android - 在 ImageView 中使用大图像或使用不同大小的图像

java - 反序列化类似 XML 的响应

python - 尝试在 Windows 上克隆 pypy 的 Mercurial 存储库

python - 在 pandas 中添加具有重复索引的行

c++ dom解析器问题

python - 如何从 lxml 正确使用 xmlfile api

python - 有没有办法禁用 lxml 中 anchor 属性的 urlencoding

python - 为什么这个循环有 "2 for i in range"?它有什么作用?

python - .loc、.iloc 和已弃用的 .ix 的速度。为什么不使用.ix?

python - 使用 lxml 解析 XML