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

问题描述

| 我有一个像这样的xml文件\“ file.xml
  <tables>
        <table>
                <name>abc</name>
                <row>12</row>
                <col>13</col>
        <table>
                <name>xyz</name>
                <IsWrapper/>
            <table>
                      <name>dummy</name>
                       <row>121</row>
                       <col>131</col>
            </table>
        </table>        
    </tables>

    I am using xml::libxml using perl. Here is the code.

# ----- Parsing config XML file ---
my $parser = XML::LibXML->new();
my $xmldoc = $parser->parse_file (\"file.xml\") || die(\"Could not parse xml file\\n\");
my $root = $xmldoc->getDocumentElement()|| die(\"Could not get Document Element \\n\");
print \"\\n root = $root \\n\";
if ($root->nodeType == ELEMENT_NODE) 
    {

        foreach my $child ($root->getChildNodes()) 
        { 
            #print \"\\n my child: $child \\n\";
            $st = $child->textContent;
            print \"\\n child name: $st \\n\";
            if ($child->nodeName eq \'table\')
            {  
                $dc = $child->nodeName;
                print \"\\n node name is node: $dc\\n\";
                if (defined($child->getElementsByTagName(\'IsWrapper\',0)->item(0)))
                { 
                    #do some thing
                }
                else
                {   
                    print \"\\n eneterd in else part\\n\";
                    #do some thing        
                }
            }
        }
    }
但是我无法获得主节点。我只能得到这种结构。
<table>
            <name>xyz</name>
            <IsWrapper/>
        <table>
                  <name>dummy</name>
                   <row>121</row>
                   <col>131</col>
        </table>
    </table>    
我如何才能以相同顺序获取结构中的所有元素。 输出应该是这样的
<tables>
<table><name>abc</name>
    <row>12</row>
    <col>13</col>
    <name>xyz</name>
        <row>121</row>
    <col>131</col>
        </table>
 </tables>  
我如何使用Perl解析上述XML并在libxml中获取以下输出? 非常感谢您的帮助。     

解决方法

这不是格式正确的XML文档。 您有三个开始表格标记,只有两个结束标记。 您应该首先使用XML-Validator检查XML代码。     ,我同意AlexTheBird。 如果您将XML更改为有效的统计信息,则可以解析该文件。 这个文件:
<tables>
    <table>
        <name>abc</name>
        <row>12</row>
        <col>13</col>
    </table>
</tables>
使用XML :: Simple给我以下结果
$VAR1 = {
      \'table\' => {
                 \'col\' => \'13\',\'row\' => \'12\',\'name\' => \'abc\'
               }
    };
    

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...