У меня есть 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:
для </my_next_element>
метод делегата parser:foundCharacters:
будет вызываться дважды со строками:
"foo"
"bar"
Ссылка на объект my_symbol
игнорируется. Что требуется для разрешения ссылки на сущность?
EDIT:
Удаление объявления ENTITY
my_symbol
из DTD приведет к NSXMLParserUndeclaredEntityError
. Это говорит о том, что когда присутствует объявление сущности, на которое ссылаются в <my_next_element>
, оно замечается. По какой-то причине он просто не разрешается в строку, которую он представляет.
Кроме того, если в элементе используется &
, синтаксический анализатор правильно разрешит его до "&"
, и он передается в виде строки при вызове метода делегата parser:foundCharacters:
.