gpt4 book ai didi

python - 如何使用 awk、Perl 或 Python 挖掘 XML 文档?

转载 作者:数据小太阳 更新时间:2023-10-29 02:14:49 26 4
gpt4 key购买 nike

我有一个具有以下数据格式的 XML 文件:

<net NetName="abc" attr1="123" attr2="234" attr3="345".../>
<net NetName="cde" attr1="456" attr2="567" attr3="678".../>
....

谁能告诉我如何使用 awk 单行程序对 XML 文件进行数据挖掘?例如,我想知道 abc 的 attr3。它会返回 345 给我。

最佳答案

一般来说,you don't。如果不尝试简洁地进行 XML/HTML 解析就已经很困难了,虽然您可能能够通过有限的 XML 子集拼凑出一个成功的解决方案,但最终它会失败。

此外,there are many great languages with great XML parsers already written,那么为什么不使用其中之一,让您的生活更轻松呢?

我不知道是否有为 awk 构建的 XML 解析器,但恐怕如果你想用 awk 解析 XML,你会得到很多“锤子是钉子, Screwdriver 是螺丝”的回答。我确信它可以完成,但是使用 XML::Simple(我个人最喜欢的)或其他一些 XML 解析模块在 Perl 中快速编写一些东西可能会更容易。

为了完整起见,我想指出,如果您的代码片段是整个文件的示例,则它不是有效的 XML。有效的 XML 应该有开始和结束标签,如下所示:

<netlist>
<net NetName="abc" attr1="123" attr2="234" attr3="345".../>
<net NetName="cde" attr1="456" attr2="567" attr3="678".../>
....
</netlist>

我确信无效的 XML 有它的用途,但一些 XML 解析器可能会提示它,所以除非你死定了使用 awk 单行代码来尝试半屁股“解析”你的“XML”,您可能需要考虑使您的 XML 有效。

作为对您的编辑的回应,我仍然不会单行执行,但这里有一个您可以使用的 Perl 脚本:

#!/usr/bin/perl

use strict;
use warnings;
use XML::Simple;

sub usage {
die "Usage: $0 [NetName] ([attr])\n";
}

my $file = XMLin("file.xml", KeyAttr => { net => 'NetName' });

usage() if @ARGV == 0;

exists $file->{net}{$ARGV[0]}
or die "$ARGV[0] does not exist.\n";


if(@ARGV == 2) {
exists $file->{net}{$ARGV[0]}{$ARGV[1]}
or die "NetName $ARGV[0] does not have attribute $ARGV[1].\n";
print "$file->{net}{$ARGV[0]}{$ARGV[1]}.\n";

} elsif(@ARGV == 1) {
print "$ARGV[0]:\n";
print " $_ = $file->{net}{$ARGV[0]}{$_}\n"
for keys %{ $file->{net}{$ARGV[0]} };

} else {
usage();
}

使用 1 或 2 个参数从命令行运行此脚本。第一个参数是要查找的 'NetName',第二个是要查找的属性。如果没有给出属性,它应该只列出该 'NetName' 的所有属性。

关于python - 如何使用 awk、Perl 或 Python 挖掘 XML 文档?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/909062/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com