问题描述
|
我有一个像这样的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\'
}
};