[英]how to keep & when parsing an xml file using lxml and xpath
我试图使用lxml和xpath指令从输入的xml文件中提取一些信息,并将其打印到输出文件中。 读取类似以下内容的xml标记时出现问题
...
<editor> Barnes & Nobel </editor>
...
为了解析xml文件并打印我使用的编辑器内容(xml中始终只有一个编辑器):
parser = etree.XMLParser(encoding='utf-8')
docTree = etree.parse( io.BytesIO(open(inputXML, "r").read()), parser )
print docTree.xpath('//editor')[0].text
我的问题是&
在某个时候被转换为'&'
,这弄乱了我的进一步处理。
我如何确保&
符号不会被“解码”吗?
我知道这听起来很冒昧,但是您希望数据为"&"
。 那就是XML元素的文本内容。 如果您以后需要将其处理为"&"
,那么您需要执行将XML(或HTML)编码回"&"
,
您不能要求XML解析器解析您的文档,并且不能将"&"
进入"&"
。 它不会做。
我终于在“ 如何逃离XML中的“&”符号以便它们在HTML中呈现为实体)的答案中找到了自己的问题的答案。 在我的代码中,我添加了一个中间步骤,以确保所有&字符在输出中保持不变。 这是
parser = etree.XMLParser(encoding='utf-8')
xmlText = open(inputXML, "r").read().replace("&", "&amp;")
docTree = etree.parse( io.BytesIO(xmlText), parser )
print docTree.xpath('//editor')[0].text
实际上,以防万一,我已将相同的食谱应用于http://en.wikipedia.org/wiki/List_of_XML_and_HTML_character_entity_references#Predefined%5Fentities%5Fin%5FXML中定义的XML中其他可能的实体
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.