Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用perl在xml文件中搜索特定字符串?_Xml_Perl - Fatal编程技术网

如何使用perl在xml文件中搜索特定字符串?

如何使用perl在xml文件中搜索特定字符串?,xml,perl,Xml,Perl,Bailey在xml文件中,但billybob不是前两个主要问题: 您正试图打开一个文件,其名称以.xml>结尾 应该是 open FILE, "<$inputFile>"; open FILE, "<$inputFile"; for (@lines) { 或者如果你采纳了我建议的改变 while (<FILE>) { 前两个主要问题: 您正试图打开一个文件,其名称以.xml>结尾 应该是 open FILE, "<$inputFile>";

Bailey在xml文件中,但billybob不是前两个主要问题:

您正试图打开一个文件,其名称以.xml>结尾

应该是

open FILE, "<$inputFile>";
open FILE, "<$inputFile";
for (@lines) {
或者如果你采纳了我建议的改变

while (<FILE>) {

前两个主要问题:

您正试图打开一个文件,其名称以.xml>结尾

应该是

open FILE, "<$inputFile>";
open FILE, "<$inputFile";
for (@lines) {
或者如果你采纳了我建议的改变

while (<FILE>) {

我认为你采取了错误的方法。使用基于行和正则表达式的解析无法很好地解析XML——有多种方法可以创建语义相同、与相同正则表达式不匹配的XML

我也不得不稍微调整一下您的XML,因为它是无效的。我假设,因为您提到了“示例”,所以您的XML是有效的。仅供参考-提供有效的示例XML非常有用-这意味着所有标记都是打开/关闭的

所以我用这个:

while (<$FILE>) {

注意-仅在XML文本中“查找”关键字,而不是在任何属性中。这通常比盲目匹配XML结构/属性/内容更可取

我认为你采取了错误的方法。使用基于行和正则表达式的解析无法很好地解析XML——有多种方法可以创建语义相同、与相同正则表达式不匹配的XML

我也不得不稍微调整一下您的XML,因为它是无效的。我假设,因为您提到了“示例”,所以您的XML是有效的。仅供参考-提供有效的示例XML非常有用-这意味着所有标记都是打开/关闭的

所以我用这个:

while (<$FILE>) {

注意-仅在XML文本中“查找”关键字,而不是在任何属性中。这通常比盲目匹配XML结构/属性/内容更可取

下面是xml文件BaileyWhat is verb中的一个示例?billybob和Bailey的弦乐从哪里来?对于您的示例,您的命令行是什么样子的?下面是xml文件BaileyWhat is verb中的一个示例?billybob和Bailey的弦乐从哪里来?您的示例的命令行是什么样子的?
<root
><a:r
><a:p
><a:t
>Bailey</a:t></a:p></a:r><a:p
><a:pPr
lvl="1"
><a:lnSpc
><a:spcPct
val="90000"
/></a:lnSpc></a:pPr></a:p></root>
<root><a:r><a:p><a:t>Bailey</a:t></a:p></a:r><a:p><a:pPr lvl="1"><a:lnSpc><a:spcPct val="90000"/></a:lnSpc></a:pPr></a:p></root>
#!/usr/bin/perl 
use strict;
use warnings;

use XML::Twig;

my $search = 'Bailey';

my $found;
XML::Twig->new(
    twig_handlers => {
        '_all_' => sub { $found++ if $_->text =~ m/$search/ }
    }
)->parsefile($inputFile); 

if ($found) {
    print "Found $search\n";
}
else {
    print "Didn't find $search\n";
}