最好的方法在XML元素匹配属性值
问题描述:
我的XML:最好的方法在XML元素匹配属性值
< measValue dn="Cabinet=0, Shelf=0, Card=2, Host=0">
< r p="1">1.42</r>
< r p="2">2.28</r>
< /measValue>
我想用不同的模式相匹配的getAttribute( “DN”)像
1>Host=0
#这是很容易
我的解决方案:
if (getAttribute("dn")=~ /Host=0/)
2>Host=0 && Card=2
我能做到这一点但我需要匹配两次像
if (getAttribute("dn")=~ /Host=0/) && (getAttribute("dn")=~ /Card=2/)
有没有什么更好的方法来帮凶本场比赛第二个模式?使用的libxml
答
有一试:
if (getAttribute("dn")=~ /^(?=.*\bHost=0\b)(?=.*\bCard=2\b)/)
词的边界\b
来这里是为了避免匹配myHost=01
和一切类似。
答
你的方法有问题,getAttribute("dn") =~ /Card=2/
也会匹配值Card=25
这可能不是你想要的。
我会先写一个字符串键/值对转换为哈希帮手:
sub key_value_pairs_to_hash {
my $string = shift;
my %hash;
for my $pair (split(/\s*,\s*/, $string)) {
my ($key, $value) = split(/\s*=\s*/, $pair, 2);
$hash{$key} = $value;
}
return \%hash;
}
然后可以测试这样的值:
my $hash = key_value_pairs_to_hash('Cabinet=0, Shelf=0, Card=2, Host=0');
if ($hash->{Host} == 0 && $hash->{Card} == 2) {
print("match\n");
}
这是有帮助的!作品!谢谢! – marks
哎呀!刚刚意识到,它也会匹配Card = 22!这是不正确的 – marks
谢谢!我的问题在这里问一个愚蠢的问题...这很容易它适用于\ b – marks