![有没有什么工具可以让我检查 XML 节点的字符串长度](https://linux22.com/image/84386/%E6%9C%89%E6%B2%A1%E6%9C%89%E4%BB%80%E4%B9%88%E5%B7%A5%E5%85%B7%E5%8F%AF%E4%BB%A5%E8%AE%A9%E6%88%91%E6%A3%80%E6%9F%A5%20XML%20%E8%8A%82%E7%82%B9%E7%9A%84%E5%AD%97%E7%AC%A6%E4%B8%B2%E9%95%BF%E5%BA%A6.png)
我想知道是否有任何工具可以做到这一点:
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的行号