【问题标题】:How to retrieve all the nodes of an xml using xml::libxml in perl?如何在 perl 中使用 xml::libxml 检索 xml 的所有节点?
【发布时间】:2011-09-01 17:15:33
【问题描述】:

我有一个类似“file.xml”的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 perl


    【解决方案1】:

    这不是well-formed XML 文档。 你有三个开始的表格标签,只有两个结束。

    您应该首先使用XML-Validator 检查您的 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'
                     }
          };
      

      【讨论】:

      • ok ok.... 但是如何进一步获取所有节点,因为引用是 file.xml 所以下面的输出。请让我知道如何继续使用 xml::libxml 获取所有节点。
      • 如果 XML 文档格式不正确,则它不是 XML 文档,因此不能将其视为 XML 文档。告诉创建它的人学习或不使用 XML,因为当您使用 XML-Parsers 时,格式良好是必须的。我猜你必须为这个损坏的 XML 编写自己的解析器。
      猜你喜欢
      • 2013-07-15
      • 2020-08-05
      • 1970-01-01
      • 1970-01-01
      • 2014-03-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多