XML查找和替换基于属性

时间:2017-01-03 12:07:09

标签: xml

我需要这个小项目的帮助,我有两个文件,一个在越南/中文,另一个用英文,我想找到两个相同的元素(5k +)和替换,

示例:

VIET: <Property name="GM_SUSSECC" content="đem ngươi {@}{@}" type="2"/>
ENG:  <Property name="GM_SUSSECC" content="{@}{@} Logged In" type="2"/>

所以,我想用英文找到相同的名字并用其内容替换。它就像翻译一样。

我尝试使用excel,但似乎它的格式松散并破坏了我的xml, 那么有谁知道更好的方法来做到这一点?

2 个答案:

答案 0 :(得分:1)

我会使用xsh。创建一个由名称键入的英文内容的哈希表,然后将其替换为越南文件:

open eng.xml ;
$eng := hash ../@name //Property/@content ;
open viet.xml ;
for //Property {
    my $viet = xsh:lookup('eng', @name) ;
    if $viet set @content $viet ;
}
save :b ;

答案 1 :(得分:0)

我可能会使用相当出色的XML::Twig库在perl中解决此问题。这与Strawberry Perl

捆绑在一起

如果没有更多的XML示例,我无法给出完整的示例,但是:

#!/usr/bin/perl
use warnings;
use strict;

use XML::Twig;

my $source_eng = XML::Twig -> new -> parsefile ( 'test_eng.xml');
my $source_viet = XML::Twig -> new -> parsefile ( 'test_viet.xml'); 

foreach my $property ( $source_eng -> get_xpath('//Property') ) {
   my $name = $property -> att('name'); 
   my $first_match = $source_viet -> get_xpath("//Property[\@name=\'$name\']",0);

   if ( $first_match ) { 
       print "match found for $name\n";
       my $content = $first_match -> att('content'); 
       $property -> set_att('content', $content ); 
   }
}

$source_eng -> set_pretty_print('indented');
$source_eng -> print;