Mam plik XML, który używa deklarowanych wewnątrz jednostek. Na przykład:Jak rozwiązać zadeklarowane wewnętrznie odwołanie do jednostki XML za pomocą NSXMLParser
<?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>
...
Korzystanie z klasy NSXMLParser, jak jestem w stanie rozwiązać odniesienia my_symbol
jednostki?
Z eksperymentu metoda delegata parser:foundInternalEntityDeclarationWithName:value:
zostanie wywołana dla deklaracji jednostki my_symbol
o wartości "my symbol value"
. Następnie, gdy osiągnięty zostanie element my_next_element
, NSXMLParser
wywoła metodę delegata parser:didStartElement:namespaceURI:qualifiedName:attributes:
.
Przed parser:didEndElement:namespaceURI:qualifiedName:
nazywa dla </my_next_element>
metoda parser:foundCharacters:
delegat zostanie wywołana dwukrotnie strun:
"foo"
"bar"
Odniesienie my_symbol
jednostka jest ignorowany. Co jest wymagane, aby odwołanie do jednostki mogło zostać rozwiązane?
EDIT:
Zdejmowanie deklarację ENTITY
z my_symbol
z DTD spowoduje NSXMLParserUndeclaredEntityError
. Sugeruje to, że gdy deklaracja encji jest obecna, a następnie przywoływana w <my_next_element>
, jest zauważana. Z jakiegoś powodu po prostu nie jest on rozwiązany dla ciągu, który reprezentuje.
Ponadto, jeśli w elemencie użyto &
, parser prawidłowo rozwiąże go na "&"
i zostanie przekazany jako ciąg po wywołaniu metody delegatów parser:foundCharacters:
.
Teraz wpadam na ten problem. Rozwiązałeś to? –
możesz go znaleźć z [XPath] (http://en.wikipedia.org/wiki/XPath)? –
Wykonałem kwerendę XPath na 'my_element' i oba "foo" i "bar" również nie zostały rozwiązane. Czy poprawnie jest odwoływać się do jednostek deklarowanych wewnętrznie, tak jak ja to zrobiłem? –