Чи можна вставити вміст HTML у документ XML?


78

Мені потрібно вставити вміст HTML у XML-документ, чи можливо це, чи вміст HTML має кодуватися, наприклад, у BASE64 або чимось іншим подібним?

Відповіді:


140

Ви можете включити вміст HTML. Однією з можливостей є кодування його в BASE64, як ви вже згадували.

Інший може використовувати CDATAтеги.

Приклад використання CDATA:

<xml>
    <title>Your HTML title</title>
    <htmlData><![CDATA[<html>
        <head>
            <script/>
        </head>
        <body>
        Your HTML's body
        </body>
        </html>
     ]]>
    </htmlData>
</xml>

Будь ласка, запиши:

Початкова послідовність символів CDATA: <![CDATA[

Заключна послідовність символів CDATA: ]]>


7
+1 CDATA - це набагато кращий IMO, оскільки він зберігає речі, які читаються людиною, і не має неминучих 33% додаткової ваги base64
Pekka,

3
просто пам’ятайте, що XML та CDATA зберігають пробіли.
zzzzBov

5
Я вирішив використовувати BASE64, оскільки він буде зберігати дані зі 100% точністю, коли CDATA та екранування додадуть додатковий пробіл, якщо відформатовано. Також додавання CDATA додало б додаткової складності і вимагало б певного попереднього сканування HTML, на випадок, якщо HTML містив елемент CDATA ...
новачок

1
Термін дії посилання закінчився.
Franklin Yu

22

поки ваш вміст html не повинен містити CDATAелемент, ви можете містити HTML в CDATAелементі, інакше вам доведеться уникати сутності XML.

<element><![CDATA[<p>your html here</p>]]></element>

VS

<element>&lt;p&gt;your html here&lt;/p&gt;</element>

8

Призначення кодування BASE64 полягає у взятті двійкових даних і можливості збереження їх у рядку. Ця вигода пов’язана із витратами, збільшенням розміру результату (я думаю, це співвідношення 4 до 3). Є два рішення. Якщо ви знаєте, що дані будуть добре сформовані XML, включіть їх безпосередньо. Інший, кращий варіант - це включити HTML у розділ CDATA всередині елемента в XML.


Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.