第一次海报。我会尽量具体。为了缩小问题范围,我无法控制 xml 文档的外观(我必须让解析器按原样处理文档)。该文件格式正确(没有什么告诉我该文件格式不正确,我看不出它为什么不正确的原因)。我没有从程序中得到任何错误(或来自解析器的异常)。反正...
我将一个 xml 文件(utf-8 编码)输入到 sax 解析器中,并提取出我需要的标签之间的信息(也需要时的属性)。该文档有很多嵌套标签(以及一些名称相同的标签)。为了确保我到达文档中存储我需要的信息的区域,我使用了一系列我设置/重置的标志(当我看到开始标签时设置,当我看到结束标签时重置)。如果满足某些条件(取决于设置的标志),在内容处理程序的内容函数中,我将信息附加到对象中保存的列表中。我不以任何方式修改内容,然后将对象的内容写入文件。
当它读入内容时,sax 解析器会替换转义字符。所以这:
<name>D & 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.