gpt4 book ai didi

Python XML sax 解析器删除所有内容,包括 &

转载 作者:行者123 更新时间:2023-11-30 23:31:37 25 4
gpt4 key购买 nike

第一次海报。我会尽量具体。为了缩小问题范围,我无法控制 xml 文档的外观(我必须让解析器按原样处理该文档)。该文件格式良好(没有任何信息告诉我该文档格式不正确,而且我看不出有什么理由不这样做)。我没有从程序返回任何错误(或解析器的异常)。无论如何...

我将一个 xml 文件(utf-8 编码)输入到 sax 解析器中,并提取我需要的标签之间的信息(也需要时的属性)。该文档有很多嵌套标签(以及一些名称相同的标签)。为了确保我到达文档中存储所需信息的区域,我使用了一系列设置/重置的标志(当我看到开始标签时设置,当我看到结束标签时重置) )。如果满足某些条件(取决于设置的标志),在内容处理程序的内容函数中,我将信息附加到对象内保存的列表中。我不会以任何方式修改内容,然后将对象的内容写入文件。

当它读取内容时,sax 解析器会替换转义字符。所以这个:

<name>D &amp; C YELLOW NO. 10</name>

应该变成这样:

D & C YELLOW NO. 10

但是在文件中,当内容打印到控制台时(在内容处理程序的字符函数中),字符串读取为:

D 

在文件和控制台打印中,D 后跟一个空格。我的问题是,这是某种错误还是我遗漏了什么?

编辑:提供了相关代码。 xmlFile 只是一个包含文件名的字符串(即像 test.xml)。

XMLContentHandler=NIHXMLparser.XMLContentHandler()
xml.sax.parse(xmlFile,XMLContentHandler)

由于我不会以任何方式修改文件的内容,只是提取它,因此我将提供解析器的框架。

class XMLContentHandler(xml.sax.ContentHandler):
def __init__(self):
#initializing some flags to false
def startElement(self, name, attrs):
#set flags according to what tag
#names appear.
def characters(self,content):
#depending on certain flags being set
#I just pull out the info between there.
#No modifications made. The sax parser
#parses the content variable on its own.
#I have no control over what it sends back.
def endElement(self,name):
#resets flags here.

最佳答案

是的,你错过了一些东西。来自 xml.sax.ContentHandler.characters documentation :

The Parser will call this method to report each chunk of character data. SAX parsers may return all contiguous character data in a single chunk, or they may split it into several chunks ...

<小时/>

您可以尝试在 .characters() 中收集文本并在 endElement 中发出它,如下所示:

#! /usr/bin/python

import xml
import xml.sax
import StringIO

class NIHXMLparser:
class XMLContentHandler(xml.sax.ContentHandler):
def __init__(self):
self.name = False
self.content = ''
def startElement(self, name, attrs):
if name == 'name':
self.name = True
def characters(self,content):
self.content += content
def endElement(self,name):
if self.name and name == 'name':
self.name = False
print self.content
self.content = ''

xmlText = r'<name>D &amp; C YELLOW NO. 10</name>'
xmlFile = StringIO.StringIO(xmlText)

XMLContentHandler=NIHXMLparser.XMLContentHandler()
xml.sax.parse(xmlFile,XMLContentHandler)

关于Python XML sax 解析器删除所有内容,包括 &,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19791528/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com