Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/13.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/9.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
Xml 在perl中用另一个文本替换跨多行标记之间的文本_Xml_Perl_Xml Parsing - Fatal编程技术网

Xml 在perl中用另一个文本替换跨多行标记之间的文本

Xml 在perl中用另一个文本替换跨多行标记之间的文本,xml,perl,xml-parsing,Xml,Perl,Xml Parsing,我需要将文件中标记(…)之间的多行文本替换为Perl中其他文件中的另一个多行文本。我正在使用搜索和替换功能,但当前不工作。如果开始标记和结束标记都在同一行中,那么我可以替换它们,否则它不会替换。对于Ex,在目标文件中: . . . <stats> <stat type="string" value="a" /> <stat type="string" value="b" /> <stat type

我需要将文件中标记(
)之间的多行文本替换为Perl中其他文件中的另一个多行文本。我正在使用搜索和替换功能,但当前不工作。如果开始标记和结束标记都在同一行中,那么我可以替换它们,否则它不会替换。对于Ex,在目标文件中:

    .
    .
    .

    <stats>
    <stat type="string" value="a" />
    <stat type="string" value="b" />
    <stat type="string" value="c" />
    <stat type="string" value="d" />
    </stats>

    .
    .
    .
    .
。
.
.
.
.
.
.
我的代码片段的一部分如下所示:

my $replacetext="<stats>"."@lines"."</stats>";
my $searchtext="<stats>.*</stats>";

# Here @file_lines is the array containing destination file and  @lines is the array containing source file.

foreach (@file_lines) 
{
      $_=~ s/$searchtext/$replacetext/g;
}
my$replacetext=”“.“@lines”。”;
my$searchtext=“*”;
#这里@file_line是包含目标文件的数组,@lines是包含源文件的数组。
foreach(@file\u行)
{
$\=~s/$searchtext/$replacetext/g;
}

'.*
仅当开始标记和结束标记在同一行时才起作用

这是不正常的。正如@mu所提到的,尝试使用XML解析器——例如,您可以实现您想要的

请看一下教程


这超出了您的需要,但将为您提供一个很好的介绍,让您了解如何在Perl

使用XMLs。正如@mu所提到的,尝试使用XML解析器——例如,您可以实现您想要的

请看一下教程


这超出了您的需要,但将为您提供一个很好的介绍,让您了解如何在Perl中使用XMLs

不要使用正则表达式来解析XML。使用XML解析器

使用包装器的示例如下:

my$source;

$source={打开我的$source,“不要使用正则表达式来解析XML。请使用XML解析器

使用包装器的示例如下:

my$source;

$source={open my$source,'虽然使用XML库通常是正确的做法,但是如果文件不是太大,并且您不希望实际解析和遍历XML的开销(例如,只需要很小的更改),您仍然可以以快速而肮脏的方式执行此操作

my $joined_file = join "\n", @file_lines;          # one long multi-line string
$joined_file =~ s/$searchtext/$replacetext/sg;     # s means multi-line
my @updated_file_lines = split /\n/, $joined_file; # result

尽管使用XML库通常是正确的做法,但如果文件不太大,并且不希望实际解析和遍历XML的开销(例如,只需要一些小的更改),您仍然可以以快速而肮脏的方式执行此操作

my $joined_file = join "\n", @file_lines;          # one long multi-line string
$joined_file =~ s/$searchtext/$replacetext/sg;     # s means multi-line
my @updated_file_lines = split /\n/, $joined_file; # result

如果文件不太大,将其加载到字符串并替换正则表达式,然后保存,如果文件太大,则需要使用标志变量,该变量将指示指针是否位于应替换的文本中…编程时不需要单独尝试思考?您是否考虑过使用XML解析器?CPAN有很多用于处理XML的工具。如果文件不太大,则将其加载到字符串并替换正则表达式,然后保存,如果文件较大,则需要使用标志变量,该变量将指示文本中的指针是否应该被替换…编程时不需要单独尝试思考?您是否考虑过使用XML解析器?CPAN有许多用于处理XML的工具。