为什么XML::Simple会将这个假小子的便条压扁?

为什么XML::Simple会将这个假小子的便条压扁?,xml,perl,Xml,Perl,我试图解析一个注释,其中包含指向另一个注释的链接。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"

我试图解析一个注释,其中包含指向另一个注释的链接。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,但我以前从未见过它在文本中嵌套这样的标记


如果这是一个bug,那么有人知道另一个XML模块可以解决这个问题吗?

以上内容完全是有效的XML。您有一个开头元素,后跟一个文本节点,后跟一个开头元素

我猜您正在解析的文本在插入顶级节点之前没有正确转义。e、 也许应该是这样


这将导致将文本作为一个文本节点获取,如果我正确阅读,则无法解析内容。

以上内容完全是有效的XML。您有一个开头元素,后跟一个文本节点,后跟一个开头元素

我猜您正在解析的文本在插入顶级节点之前没有正确转义。e、 也许应该是这样


这将导致将文本作为一个文本节点获取,并且如果我阅读正确,则无法解析内容。

XML::Simple不是用于一般XML解析的合适解析模块。它的设计有一个目的,那就是:以XML格式解析配置文件。因此,它在某种程度上简化了数据,或者简化了很多,这取决于您向数据提供的内容。如果您关心文本和标记的顺序,就不应该使用此模块。

XML::Simple不是用于一般XML解析的合适解析模块。它的设计有一个目的,那就是:以XML格式解析配置文件。因此,它在某种程度上简化了数据,或者简化了很多,这取决于您向数据提供的内容。如果您关心文本和标记的顺序,则不应使用此模块。

不幸的是,我不可以选择这样做。我只是从Tomboy的文件结构中获取信息。我认为您必须获取顶级节点的内容,并将其重新分析为文本,然后根据需要重新生成和转义。不幸的是,这不是我的选择。我只是从Tomboy的文件结构中获取了一些信息。我认为您必须将顶级节点的内容作为文本重新分析,然后根据需要重新生成和转义。这是正确的答案。您希望解析树像在标记中一样是有序的,但XML::Simple正在将其扁平化为具有“字段”的对象,如link:internal。查看XML::Parser::Style::Tree以获得您可能需要的表示形式。这是正确的答案。您希望解析树像在标记中一样是有序的,但XML::Simple正在将其扁平化为具有“字段”的对象,如link:internal。查看XML::Parser::Style::Tree以获得您可能需要的表示。
'text' => {
  'xml:space' => 'preserve',
  'note-content' => {
    'version' => '0.1',
    'link:internal' => 'in use',
    'content' => [
        'Our IP Blocks
        What\'s ',
        '?'
    ]
  }
}
What's &lt;link:internal&gt;in use&lt;/link:internal&gt;