我有一个使用内部声明实体的XML文件。例如:
<?xml version="1.0" encoding="UTF-8"?>
...
<!ENTITY my_symbol "my symbol value">
...
<my_element>
<my_next_element>foo&my_symbol;bar</my_next_element>
</my_element>
...
使用NSXMLParser类,我该如何解决my_symbol实体引用?
经过试验,parser:foundInternalEntityDeclarationWithName:value:代理方法将被调用以获取my_symbol实体声明,并返回值为“my symbol value”。然后,在到达my_next_element元素时,NSXMLParser将调用parser:didStartElement:namespaceURI:qualifiedName:attributes:代理方法。
在parser:didEndElement:namespaceURI:qualifiedName:被调用之前,parser:foundCharacters:代理方法将两次被调用,字符串分别为:
1. "foo" 2. "bar"
my_symbol实体引用将被忽略。为了解析实体引用,需要什么条件?
编辑:
从DTD中删除my_symbol的ENTITY声明将导致NSXMLParserUndeclaredEntityError。这表明当实体声明存在并且在中被引用时,它会被注意到。出于某种原因,它只是没有被解析为它所代表的字符串。
此外,如果在元素内使用&,则解析器将正确地将其解析为"&",并在调用parser:foundCharacters:代理方法时传递该字符串。