2011-06-28 12 views
17

Potrzebuję móc odwoływać się do nazwanych obiektów HTML, takich jak •, zamiast do alternatywnego kodu Unicode • w dokumencie XML. Mam kontrolę nad niektórymi częściami dokumentu XML, na przykład definiując DOCTYPE, ale wykonanie polecenia znajdowania i zamiany w rzeczywistym pliku XML nie jest opcją. Mogę uzyskać niektóre elementy, takie jak   i &, włączając tymczasowy DOCTYPE XHTML, ale muszę zdefiniować więcej ręcznie. Jak mam to zrobic?Jak zdefiniować odniesienia encji HTML wewnątrz poprawnego dokumentu XML?

- EDIT -

Dzięki odpowiedź Jima, oto co skończyło się. To jest dobre, bo mogę korzystać podmioty przejściowe XHTML, a także dodać własne:

<!DOCTYPE 
    html 
    PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd" 
    [ 
     <!ENTITY bull "&#8226;"> 
     <!ENTITY ldquo "&#8220;"> 
     <!ENTITY rdquo "&#8221;"> 
     ... etc ... 
    ] 
> 
+2

Jeśli kończy się przy użyciu dużo zgłoszeń jednostki, należy rozważyć umieszczenie ich w osobnym pliku, a następnie za pomocą parametru podmiot je odwołać. –

Odpowiedz

13

Jeśli można zmodyfikować XML w celu włączenia DTD inline można określić podmioty tam:

<!DOCTYPE yourRootElement [ 
    <!ENTITY bull "&#8226;"> 
    .... 
]> 
+0

Niesamowite, dziękuję! – mattmc3

+0

To jest magia! Może być również używany do tworzenia plików manifestu Android, ułatwia tworzenie szablonu bez popełniania błędów w nazwie pakietu lub tym podobnych ... – Tonithy

3

nie jestem cetain, ale myślę, że XHTML DTD powinno dać sporo jednostek (253):

http://en.wikipedia.org/wiki/List_of_XML_and_HTML_character_entity_references#Entities_representing_special_characters_in_XHTML

również w spec w3, istnieje wzmianka dodatkowych DTD dla znaków specjalnych itp. http://www.w3.org/TR/xhtml-modularization/dtd_module_defs.html#a_dtd_xhtml_character_entities

Jednak nie byłem w stanie znaleźć przykładu implementacji DTD znaków specjalnych.


Edycja przez DevNull

Oto niezwykle rodzajowy przykład realizacja jednego podmiotu modułów DTD. Aby to zaimplementować, wystarczy dodać jednostkę parametru wskazującą moduł.

<?xml version="1.0"?> 
<!DOCTYPE test [ 
<!ELEMENT test (#PCDATA)> 
<!ENTITY % xhtml-special SYSTEM "xhtml-special.ent"> 
%xhtml-special; 
]> 
<test>Here is a left double quote: &ldquo;</test> 
+0

Dodałem przykład implementacji. Mam nadzieję, że nie masz nic przeciwko. Jeśli nie o to Ci chodziło, możesz usunąć moją zmianę. –

+0

Fajnie, miło @DevNull nie wiedziałem, że możesz to zrobić. Czy też "test (#PCDATA)" mówi parserowi, że "test" jest danymi z analizowanej postaci? –

+0

Oznacza to, że element 'test' może zawierać" dane analizowanych znaków "(zwykły tekst). –

Powiązane problemy