使用 XML::Twig 解析 XML

发布于 2024-11-27 06:40:08 字数 462 浏览 2 评论 0原文

我有以下 XML 格式,其中包含 100 个项目,如下所示,

我想解析它并提取 data1 和 data2 我如何使用 XML::Twig Perl 模块

<Item>
<data1>  <data3> date </data3> </data1>
<data2>   data2 </data2>

</Item>
<Item>
<data1>  <date3> data22 </data3> </data1>
<data2>   data2 </data2>
</Item>
....

I have the following XML format that has 100 items as the below

I want to parse it and extract data1 and data2 how can i do this with XML::Twig Perl module

<Item>
<data1>  <data3> date </data3> </data1>
<data2>   data2 </data2>

</Item>
<Item>
<data1>  <date3> data22 </data3> </data1>
<data2>   data2 </data2>
</Item>
....

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

迷雾森÷林ヴ 2024-12-04 06:40:08

您的 XML 不符合规范,因此解析器无法按原样处理它。主要问题是:

  • XML 区分大小写,因此 Item 不是 item
  • 结束标记,以斜杠开头,而不是反斜杠,
  • 应该有顶级元素

修复这些问题,这段代码有效:

use strict; use warnings;

use XML::Twig;

my $data = <<END_DATA;
<items>
    <item>
        <data1>   data1 </data1>
        <data2>   data2 </data2>
    </item>
    <item>
        <data1>   data1 </data1>
        <data2>   data2 </data2>
    </item>
</items>
END_DATA


my $t = XML::Twig->new(
    twig_handlers => {
        'item' => sub {
            # process each item and print contents of dataN elements
            print
                $_->first_child_trimmed_text('data1'), "\t",
                $_->first_child_trimmed_text('data2'),"\n";
        },
    },
)->parse($data);

Your XML does not conform specification, so no parser could process it as it is. Main problems are:

  • XML is case-sensitive, so Item is something else than item
  • closing tags start with slash, not backslash
  • there should be top-level element

Fixing those issues, this code works:

use strict; use warnings;

use XML::Twig;

my $data = <<END_DATA;
<items>
    <item>
        <data1>   data1 </data1>
        <data2>   data2 </data2>
    </item>
    <item>
        <data1>   data1 </data1>
        <data2>   data2 </data2>
    </item>
</items>
END_DATA


my $t = XML::Twig->new(
    twig_handlers => {
        'item' => sub {
            # process each item and print contents of dataN elements
            print
                $_->first_child_trimmed_text('data1'), "\t",
                $_->first_child_trimmed_text('data2'),"\n";
        },
    },
)->parse($data);
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文