Почему XML :: Simple сглаживает эту заметку Tomboy? - PullRequest
1 голос
/ 18 декабря 2009

Я пытаюсь разобрать заметку Tomboy , в которой есть ссылка на другую заметку. XML выглядит примерно так:

<?xml version="1.0" encoding="utf-8"?>
<note version="0.3" xmlns:link="http://beatniksoftware.com/tomboy/link" xmlns:size="http://beatniksoftware.com/tomboy/size" xmlns="http://beatniksoftware.com/tomboy">
  <title>Our IP Blocks</title>
  <text xml:space="preserve"><note-content version="0.1">Our IP Blocks

What's <link:internal>in use</link:internal>?</note-content></text>
  <last-change-date>2009-03-10T10:24:36.3730770-04:00</last-change-date>
  <last-metadata-change-date>2009-03-10T10:24:36.3730770-04:00</last-metadata-change-date>
  <create-date>2009-03-10T10:23:14.2936280-04:00</create-date>
  <cursor-position>92</cursor-position>
  <width>450</width>
  <height>289</height>
  <x>0</x>
  <y>27</y>
  <open-on-startup>False</open-on-startup>
</note>

Я анализирую это с помощью XML :: Simple , и он вытягивает узел <link:internal /> в отдельный объект в perl.

РЕДАКТИРОВАТЬ: Результирующий объект (для узла <text /> выглядит следующим образом. Обратите внимание, что «link: internal» является отдельной сущностью от «content».

'text' => {
  'xml:space' => 'preserve',
  'note-content' => {
    'version' => '0.1',
    'link:internal' => 'in use',
    'content' => [
        'Our IP Blocks
        What\'s ',
        '?'
    ]
  }
}

Это ошибка, или я сумасшедший? Все валидаторы предполагают, что это допустимый XML, но я никогда не видел его с тегом, вложенным в текст, подобный этому.

Если это ошибка, кто-нибудь знает другой XML-модуль, который исправит это?

Ответы [ 2 ]

5 голосов
/ 18 декабря 2009

XML :: Simple не является подходящим модулем анализа для общего анализа XML. Он был разработан с одной целью: синтаксический анализ файлов конфигурации в формате XML. Так что это несколько упрощает данные & mdash; или много, в зависимости от того, что вы кормите его. Если вы заботитесь о порядке текста и тегов, вам не следует использовать этот модуль.

2 голосов
/ 18 декабря 2009

Выше приведен полностью действительный XML. У вас есть открывающий элемент, за которым следует текстовый узел, за которым следует открывающий элемент.

Я предполагаю (возможно), что текст, который вы анализируете, не был правильно экранирован перед вставкой в ​​узел верхнего уровня. например возможно это должно быть

What's &lt;link:internal&gt;in use&lt;/link:internal&gt;

Это может привести к получению текста как одного текстового узла, а содержимое не будет проанализировано (если я правильно читаю).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...