2016-09-21 42 views
3

我試圖使用lxml.etree來重現CDA QuickStart Guide found here中的CDA示例。lxml xsi:schemaLocation名稱空間URI驗證問題

特別是,我遇到了命名空間試圖重新創建這個元素的問題。

<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'}) 

的問題是,在nsmapschemaLocation條目。 lxml似乎試圖驗證的值,並給出了錯誤

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

我是否指定schemaLocation值不正確?有沒有辦法強制lxml接受任何字符串值?或者,這個例子中的值是否僅僅是一個佔位符,我應該用其他東西代替?

回答

2

nsmap是前綴到名稱空間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', 
          }) 
+0

感謝您挖掘它,我放棄了尋找答案。 – user3419537