2012-01-25 13 views
9

Przy użyciu pakietu OmniXML, możliwe jest przechowywanie kodu XML w innym pliku XML, który ma własne dane XML?przechowywać xml wewnątrz xml

Jak to:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?> 
<root> 
<data> 
    <?xml version="1.0" encoding="UTF-8" standalone="yes"?> 
     <otherxml>data</otherxml> 
</data> 

gdzie wewnątrz danych znaczników, wszystko powinno być dane. Czy istnieje znak escape, który uniemożliwia analizatorowi składni kolejnych danych do struktury danych XML?

Lub Czy OmniXML ma obsługę serializacji w tej sytuacji?

Wszelkie inne proste pomysły są również mile widziane.

+0

Czy próbowałeś tego? lub po prostu pytając, czy można to zrobić? – RBA

+0

wypróbowałem to i otrzymałem błąd parsowania – none

Odpowiedz

21

Można użyć CDATA:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?> 
<root> 
<data> 
    <![CDATA[ 
    <?xml version="1.0" encoding="UTF-8" standalone="yes"?> 
     <otherxml>data</otherxml> 
    ]]> 
</data> 

UWAGA Gdy pojawi się wartość dla data, to będzie jako ciąg tak trzeba by uruchomić go za pomocą nowego parsera XML.

Oto przykładowy kod dla omniXML:

var 
    xml:IXMLDocument; 
    Node:IXMLNode; 
begin 
    xml := CreateXMLDoc;  
    xml.SelectSingleNode('/root/data',Node); 
    ShowMessage(GetNodeCData(Node,'data','')); 
end; 
+6

+1, lepiej powiedzieć, że musisz używać CDATA_;) – TLama

+0

Nie trzeba go uruchamiać, trzeba go zapisać, aby utworzyć plik xml. – none

+1

Należy pamiętać, że mogą wystąpić problemy z kodowaniem. Na przykład, jeśli wbudowany xml używa , A zewnętrzny xml używa UTF-8, parser XML musi nadal przetwarzać wewnętrzny xml jako UTF-8. – mjn

3

jeśli zawartość w danych nie musi być odczytywane rigth dala można zakodować go na przykład w base64 lub UUEncode.

Następnie można wyodrębnić, odkodować i przeanalizować dane.

+3

To zdecydowanie trudny (i wolniejszy) sposób, aby to zrobić, ponieważ nadal trzeba przechowywać zakodowany tekst w sekcji "CDATA". –

+3

Jeśli twój osadzony XML może również zawierać CDATA, to myślę, że musisz go zakodować. Powiedziałbym, że jest to preferowany sposób z tego powodu. –

+0

@DarianMiller wydaje się być tam na miejscu. –

Powiązane problemy