#xml #perl
#xml #perl
Вопрос:
У меня есть 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 filen");
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: $dcn";
if (defined($child->getElementsByTagName('IsWrapper',0)->item(0)))
{
#do some thing
}
else
{
print "n eneterd in else partn";
#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>
Как я могу проанализировать приведенный выше XML и получить приведенный ниже вывод в libxml с использованием Perl?
Помощь очень ценится.
Ответ №1:
Это не правильно сформированный XML-документ. У вас есть три открывающих тега таблицы и только два закрывающих.
Сначала вы должны проверить свой XML-код с помощью XML-валидатора.
Ответ №2:
Я согласен с 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'
}
};
Комментарии:
1. хорошо, хорошо …. но как дальше поступить с получением всех узлов, потому что ссылка file.xml итак, приведенный ниже вывод. Пожалуйста, дайте мне знать, как действовать с xml :: libxml для получения всех узлов.
2. Если XML-документ неправильно сформирован, то это не XML-документ, и поэтому его нельзя рассматривать как XML-документ. Скажите людям, которые создали это, чтобы они узнали что-нибудь о XML или не использовали его, потому что правильная форма обязательна при работе с XML-анализаторами. Я думаю, вам нужно написать свой собственный анализатор для этого неработающего XML.