我正在使用许多xml文件。我想仅在所有文件的特定区域中替换某些特定内容。例如:
文件可能包含以下许多内容:
<h2>Content comes here</h2>
现在我只想在所有文件的上述<h2>...</h2>
区域中替换一个单词。
请指教。提前谢谢。
答案 0 :(得分:3)
Perl中的常规文本替换通常使用正则表达式和s///
运算符完成。但是,尝试仅使用正则表达式来解释XML文件的结构被认为是非常不可取的。
您应该使用解析XML的模块。 XML::Simple
将允许您将整个文档作为Perl对象加载(使用hashrefs作为属性和子标签等),然后您可以遍历它并执行您想要的替换。但是,您必须根据您的选择编写该结构。
XML::Parser
是一个不错的选择。它在概念上有点棘手,但它的设计完全符合您的要求。您设置处理程序函数,每次解析器找到标记的开头或结尾时都会调用它们。在你的情况下,所有这些必须做的是输出标签及其内容,除非它是h2
标签,在这种情况下你做了一些额外的处理。
如果你习惯在JavaScript或其他一些基于DOM的XML库中做这样的事情,你可能还想使用一些面向DOM的解析器。
最后,为了完整起见,你可以写一个(非常短的)XSLT文件,它将进行这种转换(不是专家,所以不确定如何)并使用XML::XSLT
应用它,基本上是一行。