преобразуйте &lt в <xml документ

Я считал XML-файл и преобразовал в объект NSXMLDocument. Но, из-за присутствия" <" в строковом содержании узла, это было преобразовано в "&lt". Так, когда я пишу это как xml документ файлу, это имеет символ "&lt" в нем.

Как я могу записать в файл как обычный XML-файл, в котором "&lt" будет заменен" <".

Спасибо и наилучшие пожелания, Lenin

6
задан boom 8 March 2010 в 05:22
поделиться

4 ответа

Когда символ < появляется в текстовом узле, он будет сериализован как < при записи xml в файл.

Когда вы позже прочитаете этот файл с помощью анализатора xml, текстовый узел будет содержать оригинальный символ <.

У вас также есть возможность закодировать текстовый узел в CDATA. В этом случае сериализованный символ < будет находиться внутри блока CDATA. Многие XML API не будут сохранять разницу между CDATA и текстовыми узлами. CDATA следует рассматривать как механизм экранирования, облегчающий редактирование для авторов-людей.

4
ответ дан 17 December 2019 в 04:45
поделиться

Символ < должен быть экранирован, если он не является частью тега XML (см. здесь). Вам действительно не следует нарушать спецификацию XML...

Однако, если вы должны, вы можете сделать трюк перед написанием XML-документа:

  1. Замените экземпляры < уникальной строкой, которая не будет (что-то, что, как вы знаете, не встречается больше нигде в файле). Возможно, подойдет что-то вроде *-lt-*.
  2. Пусть парсер создаст файл и сохраните его.
  3. Прочитайте файл как как обычный текст, и замените ваши экземпляры *-lt-* на обычный < символом.
  4. Перепишите файл, уничтожая версию, которая была записана парсером XML.

Опять же, это ужасная идея - нарушить спецификацию XML... сделав это, ни один парсер не сможет прочитать ваш новый XML-документ.

0
ответ дан 17 December 2019 в 04:45
поделиться

< в текстовых узлах xml должен быть представлен как <.

Если вы замените его на s/&</ перед записью в xml файл, это приведет к ошибке разбора при чтении из этого файла.

1
ответ дан 17 December 2019 в 04:45
поделиться

Для выполнения операции наоборот можно использовать следующие функции

htmlspecialchars и

htmlentities()

0
ответ дан 17 December 2019 в 04:45
поделиться
Другие вопросы по тегам:

Похожие вопросы: