我想检索遗留的xml文件,进行操作并保存.
这是我的代码:
from xml.etree import cElementTree as ET
NS = "{http://www.somedomain.com/XI/Traffic/10}"
def fix_xml(filename):
f = ET.parse(filename)
root = f.getroot()
eventlist = root.findall("%(ns)Event" % {'ns':NS })
xpath = "%(ns)sEventDetail/%(ns)sEventDescription" % {'ns':NS }
for event in eventlist:
desc = event.find(xpath)
desc.text = desc.text.upper() # do some editting to the text.
ET.ElementTree(root, nsmap=NS).write("out.xml", encoding="utf-8")
shorten_xml("test.xml")
Run Code Online (Sandbox Code Playgroud)
我加载的文件包含:
xmlns="http://www.somedomain.com/XI/Traffic/10"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.somedomain.com/XI/Traffic/10 10.xds"
Run Code Online (Sandbox Code Playgroud)
在根标签处.
我有以下与命名空间相关的问题:
<?xml version="1.0" encoding="utf-8"?>在开头没有.<ns0:eventDescription>而我需要输出作为原始输出<eventDescription>,在开头没有命名空间.这些如何解决?
我已经对QName做了相当多的阅读,但我找不到任何关于如何使用它的好例子.有人能给我一个简单的例子来说明如何使用QName并解释它将用于什么上下文?
我正在尝试lxml.etree重现此处找到的CDA快速入门指南中的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">
Run Code Online (Sandbox Code Playgroud)
我正在使用的代码如下
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'})
Run Code Online (Sandbox Code Playgroud)
问题在于schemaLocation进入nsmap.lxml似乎试图验证该值并给出错误
ValueError: Invalid namespace URI u'urn:hl7-org:v3 CDA.xsd'
Run Code Online (Sandbox Code Playgroud)
我是否schemaLocation错误地指定了值?有没有办法强制lxml接受任何字符串值?或者示例中的值是否只是一个占位符,我应该用其他东西替换?