Вложение XML / CDATA в XML-файл? - PullRequest
       7

Вложение XML / CDATA в XML-файл?

3 голосов
/ 14 ноября 2011

Мне нужно поместить довольно большой XML-файл в другой XML-файл. Я подумал об использовании CDATA для этого:

http://www.w3.org/TR/2000/REC-xml-20001006#sec-cdata-sect http://www.w3schools.com/xml/xml_cdata.asp

но так как мой xml может также содержать CDATA, это не сработает, если я не сделаю какой-нибудь неприятный обходной путь:

http://web -design.blogs.webucator.com / 2010/11/20 / гнездовья CDATA-блоки /

Существуют ли более эффективные способы передачи / кодирования больших вложенных XML-файлов или формат XML просто не предназначен для такого использования?

Ответы [ 5 ]

4 голосов
/ 26 ноября 2012

вы можете заменить внутреннюю ]] на ]]]]>

2 голосов
/ 14 ноября 2011

Первый XML:

<root>
    <data1 value="test1" />
    <data2>
        <value>test2</value>
    </data2>
</root>

Второй XML:

<root2>
    <data3 value="test3" />
    <data4>
        <value>test4</value>
    </data2>
</root2>

Вы можете включить второй XML первым с определенным узлом:

<root>
    <data1 value="test1" />
    <data2>
        <value>test2</value>
    </data2>
    <dataFromSecondXML>
        <data3 value="test3" />
        <data4>
            <value>test4</value>
        </data2>
    </dataFromSecondXML>
</root>
2 голосов
/ 14 ноября 2011

Да, в вашем самом верхнем документе сделайте раздел CDATA типа данных bin.base64.Таким образом, даже если документ, который вы упаковываете, содержит раздел CDATA, вы защищены.В качестве дополнительного бонуса ваше приложение также будет поддерживать двоичные файлы (изображения, электронные таблицы и т.* А как развернуть его на другом конце ...

function unwrapBinaryFile(ndFile, strFileName )
{
    var ado_stream = new ActiveXObject("ADODB.Stream");
    ndFile.dataType = "bin.base64";

    ado_stream.Type = 1; // 1=adTypeBinary
    ado_stream.Open();
    ado_stream.write( ndFile.nodeTypedValue );
    ado_stream.SaveToFile( strFileName, 2 );
    ado_stream.Close(); 
}
1 голос
/ 14 ноября 2011

XML является иерархическим: почему вы не можете вкладывать документы напрямую, без CDATA?Помимо проблем DTD, любой XML-документ может быть скопирован как содержимое элемента в другом документе.

0 голосов
/ 14 ноября 2011

Короткий ответ: XML не предназначен для такого использования!

Однако, если вы закодируете base64 XML-файл для упаковки, закодированный результат не будет содержать символов, которые могут быть интерпретированы как разметка или как ссылки на сущности, и его можно безопасно хранить как содержимое текстового узла. *

...