我想知道是否有任何工具可以做到这一点:
XML 示例:
<node1>
<Data>
<Unique>123456789-1234567891</Unique>
</Data>
</node1>
我希望搜索的是 Unique 小于 10 left to - 并且如果 Right 小于 9 from - to right。
因此搜索会将这个记录/节点标记为有问题
<Unique>6789-1234567891</Unique>
我试图使用 Grep 来做到这一点,但是我已经开始在 Bash 中使用各种 XML 工具,所以我想我可能会首先在特定工具上提出这个问题。
xmllint 是我正在使用的一个。
答案1
(很抱歉给你发垃圾邮件)在 perl 中使用 XML 解析器
(如果需要的话sudo cpan XML::DT
:)
#!/usr/bin/perl
use XML::DT;
my $file = shift;
# $c - contents after child processing
print dt(
$file,
'Unique' => sub{$c =~ s/^(\d{1,9}-\d+|\d+-\d{1,8})$/FIXME:$1/; toxml },
)
在这种情况下,您会得到一个带有“FIXME”注释的 XML
答案2
grep -nP "<Unique>(\d{1,9}-\d+|\d+-\d{1,8})</Unique>" ex.xml
-n
输出错误Uniques的行号