如何在perl中使用xml::libxml检索xml的所有节点?

如何在perl中使用xml::libxml检索xml的所有节点?,xml,perl,Xml,Perl,我有一个类似“file.xml”的xml文件 abc 12 13 xyz 笨蛋 121 131 我正在使用perl使用xml::libxml。 #----解析配置XML文件--- my$parser=XML::LibXML->new(); 我的$xmldoc=$parser->parse_文件(“file.xml”)|| die(“无法解析xml文件”); 我的$root=$xmldoc->getDocumentElement()|| die(“无法获取文档元素\n”); 打印“\n root

我有一个类似“file.xml”的xml文件


abc
12
13
xyz
笨蛋
121
131
我正在使用perl使用xml::libxml。
#----解析配置XML文件---
my$parser=XML::LibXML->new();
我的$xmldoc=$parser->parse_文件(“file.xml”)|| die(“无法解析xml文件”);
我的$root=$xmldoc->getDocumentElement()|| die(“无法获取文档元素\n”);
打印“\n root=$root\n”;
if($root->nodeType==ELEMENT\u NODE)
{
foreach my$child($root->getChildNodes())
{ 
#打印“\n我的孩子:$child\n”;
$st=$child->textContent;
打印“\n子名称:$st\n”;
if($child->nodeName eq‘table’)
{  
$dc=$child->nodeName;
打印“\n节点名称为节点:$dc\n”;
if(已定义($child->getElementsByTagName('IsWrapper',0)->项(0)))
{ 
#做点什么
}
其他的
{   
打印“\n else部分中的eneterd\n”;
#做点什么
}
}
}
}
但是我不能得到主节点,我只能得到这个结构

<table>
            <name>xyz</name>
            <IsWrapper/>
        <table>
                  <name>dummy</name>
                   <row>121</row>
                   <col>131</col>
        </table>
    </table>    

xyz
笨蛋
121
131
如何以相同的顺序获取结构中的所有元素

输出应该是这样的

<tables>
<table><name>abc</name>
    <row>12</row>
    <col>13</col>
    <name>xyz</name>
        <row>121</row>
    <col>131</col>
        </table>
 </tables>  

abc
12
13
xyz
121
131
如何使用Perl解析上面的XML并以libxml获得下面的输出

非常感谢您的帮助。

这不是XML文档。 您有三个开始表标记,只有两个结束表标记

您应该首先检查XML代码。

这不是XML文档。 您有三个开始表标记,只有两个结束表标记


您应该首先检查XML代码。

我同意AlexTheBird的观点

如果将xml更改为有效的stat,则可以解析该文件。 此文件:

<tables>
    <table>
        <name>abc</name>
        <row>12</row>
        <col>13</col>
    </table>
</tables>

我同意亚历克西斯·伯德的观点

如果将xml更改为有效的stat,则可以解析该文件。 此文件:

<tables>
    <table>
        <name>abc</name>
        <row>12</row>
        <col>13</col>
    </table>
</tables>

好的,好的……但是我们将如何进一步获取所有节点,因为引用是file.xml,所以下面的输出是这样的。请让我知道如何继续使用xml::libxml获取所有节点。如果xml文档的格式不正确,那么它就不是xml文档,因此不能被视为xml文档。请告诉创建此文档的人员进行学习关于XML或不使用它,因为当你使用XML解析器时,格式良好是必须的。我想你必须为这个坏掉的XML编写自己的解析器。好的,好的……但是如何进一步获取所有节点,因为引用是file.XML,所以下面的输出。请让我知道如何继续使用XML::libxml获取所有节点e节点。如果XML文档的格式不好,那么它就不是XML文档,因此不能将其视为XML文档。请告诉创建此文档的人员了解XML或不要使用它,因为在使用XML解析器时,格式良好是必须的。我想您必须为此损坏的XML编写自己的解析器。
$VAR1 = {
      'table' => {
                 'col' => '13',
                 'row' => '12',
                 'name' => 'abc'
               }
    };