2012-01-25 26 views
9

Sử dụng gói OmniXML, có thể lưu trữ mã XML bên trong một tệp XML khác có dữ liệu XML riêng của nó không?Lưu trữ xml bên trong xml

Như thế này:

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

nơi bên trong dữ liệu thẻ, tất cả mọi thứ nên được dữ liệu. Có một char thoát để ngăn phân tích cú pháp phân tích cú pháp dữ liệu tiếp theo vào cấu trúc dữ liệu XML không?

Hoặc OmniXML có hỗ trợ tuần tự hóa cho trường hợp này không?

Bất kỳ ý tưởng đơn giản nào khác cũng được hoan nghênh.

+0

Bạn đã thử điều đó chưa? hoặc chỉ yêu cầu nếu nó có thể được thực hiện? – RBA

+0

đã thử rằng, và đã phân tích cú pháp lỗi – none

Trả lời

21

Bạn có thể dùng 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> 

Lưu ý khi bạn nhận được giá trị cho data, nó sẽ như là một chuỗi, do đó bạn sẽ phải chạy nó thông qua một phân tích cú pháp XML mới.

Dưới đây là một ví dụ mã cho omniXML:

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

+1, tốt hơn để nói _you phải sử dụng CDATA_;) – TLama

+0

Không cần phải chạy nó, nó cần phải được viết để tạo tệp xml. – none

+1

Lưu ý rằng có thể có sự cố mã hóa. Ví dụ: nếu xml nhúng sử dụng Và xml bên ngoài sử dụng UTF-8, trình phân tích cú pháp XML vẫn phải xử lý xml bên trong làm UTF-8. – mjn

3

nếu nội dung trong dữ liệu không nhất thiết phải được đọc rigth lập tức bạn có thể mã hóa nó trong ví dụ Base64 hoặc UUencode.

Sau đó, bạn có thể trích xuất, giải mã và phân tích cú pháp dữ liệu

+3

Đó chắc chắn là cách cứng (và chậm hơn) để làm điều đó, vì bạn vẫn phải lưu trữ văn bản được mã hóa trong phần 'CDATA'. –

+3

Nếu XML nhúng của bạn cũng có thể chứa CDATA thì tôi nghĩ bạn phải mã hóa nó. Tôi sẽ nói rằng đây là cách ưa thích vì lý do đó. –

+0

@DarianMiller dường như là điểm trên đó. –

Các vấn đề liên quan