免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
123下一页
最近访问板块 发新帖
查看: 4024 | 回复: 23
打印 上一主题 下一主题

新人求助:XML提取文本 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2012-06-14 18:04 |只看该作者 |倒序浏览
XML格式如下:
    <tu tuid="72612" srclang="EN-US">
      <tuv xml:lang="EN-US">
        <seg>Business case</seg>
      </tuv>
      <tuv xml:lang="FR" creationdate="20050725T061657Z" creationid="XYZ" lastusagedate="20091017T222409Z" changedate="20100316T180526Z" changeid="tmsnas" usagecount="0">
        <prop type="x-ALS:Context">TEXT</prop>
        <prop type="x-ALS:Source File">Trados Import</prop>
        <seg>Business Case.</seg>
      </tuv>
    </tu>
    <tu tuid="72637" srclang="EN-US">
      <tuv xml:lang="EN-US">
        <seg>Statement</seg>
      </tuv>
      <tuv xml:lang="FR" creationdate="20110823T083601Z" creationid="tmsnas" lastusagedate="20110823T083601Z" changedate="20110823T083601Z" changeid="tmsnas" usagecount="0">
        <prop type="x-ALS:Context">TEXT</prop>
        <prop type="x-ALS:Source File">\\nashapp202.corp.emc.com\tms\website\TC\1994\SRC\EN-US\Control Standards - Full_5.html</prop>
        <seg>Déclaration</seg>
      </tuv>
      <tuv xml:lang="FR" creationdate="20110823T083601Z" creationid="tmsnas" lastusagedate="20110823T083601Z" changedate="20110823T083601Z" changeid="tmsnas" usagecount="0">
        <prop type="x-ALS:Context">TEXT</prop>
        <prop type="x-ALS:Source File">\\nashapp202.corp.emc.com\tms\website\TC\1994\SRC\EN-US\Control Standards - Full_2.html</prop>
        <seg>Déclaration</seg>
      </tuv>
    </tu>

要求:打印Tag是“seg里面字符串”,并且xml:lang="FR"打印为一行,xml:lang="EN-US"的打印为另外一行。

我使用XML:Twig来处理,代码如下:
my $twig = new XML::Twig(TwigRoots=>{'seg'=>\&print_n_purge},pretty_print=>'indented');


#read XML file
my $config=$twig->parsefile($filename);
sub print_n_purge
{
        my ($t,$elt)=@_;
        #print Dumper($elt->text);

        my @kids = $elt->children;
        for my $kid (@kids)
        {
                #print Dumper $kid->text;
                my $text = $kid->text;
                $text =~ s#<.*?>##g;
                $text =~ s#\n##g;
                print $FH $text;
        }
        print $FH "\n";
        $t->purge;
}


现在问题是当一个无法合并每种语言的seg,比如<tu tuid="72637" srclang="EN-US">下面xml:lang="FR"有两个seg,现在代码是每个seg打印一行。


或者如果一个tuv下面有超过2个的seg,则知道打印前面2个。



求大虾帮忙,perl才用没几天

论坛徽章:
6
15-16赛季CBA联赛之新疆
日期:2016-03-22 22:34:5915-16赛季CBA联赛之山东
日期:2016-04-11 09:08:41程序设计版块每日发帖之星
日期:2016-06-28 06:20:00程序设计版块每日发帖之星
日期:2016-07-19 06:20:00每日论坛发贴之星
日期:2016-07-19 06:20:0015-16赛季CBA联赛之青岛
日期:2016-07-20 22:44:17
2 [报告]
发表于 2012-06-14 20:33 来自手机 |只看该作者
XML::Simple

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
3 [报告]
发表于 2012-06-14 21:13 |只看该作者
XML::Twig是支持XPATH的,用XPATH做判断

论坛徽章:
0
4 [报告]
发表于 2012-06-14 22:29 |只看该作者
XML:Simple处理大文件不行

XML::Twig是支持XPATH的,用XPATH做判断
这个能讲讲语法吗?应该怎么实现

另外seg里面可以还有其他tag,我只需要seg之间的字符。应该怎么做呢?

论坛徽章:
0
5 [报告]
发表于 2012-06-15 11:06 |只看该作者
求高手指教。

论坛徽章:
0
6 [报告]
发表于 2012-06-15 11:46 |只看该作者
你要的输出结果是啥,贴出来。

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
7 [报告]
发表于 2012-06-15 11:53 |只看该作者
LOSTKILLER 发表于 2012-06-14 22:29
XML:Simple处理大文件不行

XML::Twig是支持XPATH的,用XPATH做判断

http://search.cpan.org/~mirod/XML-Twig-3.40/Twig_pm.slow

论坛徽章:
0
8 [报告]
发表于 2012-06-15 12:29 |只看该作者
Statement
Déclaration

只是希望输出结果


现在结果是
Statement
Déclaration
Déclaration

论坛徽章:
0
9 [报告]
发表于 2012-06-15 12:46 |只看该作者
回复 6# quanpai
Statement
Déclaration

只是希望输出结果


现在结果是
Statement
Déclaration
Déclaration

   

论坛徽章:
0
10 [报告]
发表于 2012-06-15 12:59 |只看该作者
本帖最后由 quanpai 于 2012-06-15 13:00 编辑

回复 9# LOSTKILLER

那你去个重啊。其实我看不懂你的问题。而且你现在的程序运行结果也不是你说的那样啊。
   
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP