You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何基于子元素特定值提取XML父元素(Perl实现)

用Perl提取包含特定子元素值的XML父元素

当然可以用Perl结合你熟悉的XML::LibXML实现这个需求,以下是具体实现方案:

实现代码

use strict;
use warnings;
use XML::LibXML;

# 解析XML(如果是字符串XML,替换为parse_string)
my $parser = XML::LibXML->new();
my $doc = $parser->parse_file('input.xml');

# 通过XPath筛选出category值为mammal的row元素
my @target_rows = $doc->findnodes('/dataset/row[category/text()="mammal"]');

# 构建新的XML文档结构
my $new_doc = XML::LibXML::Document->new('1.0', 'UTF-8');
my $new_dataset = $new_doc->createElement('dataset');
$new_doc->setDocumentElement($new_dataset);

# 将筛选出的row元素复制到新文档中
foreach my $row (@target_rows) {
    $new_dataset->appendChild($row->cloneNode(1)); # 深拷贝包含子元素
}

# 输出格式化后的结果
print $new_doc->toString(1);

代码说明

  1. 解析XML:使用XML::LibXML的parse_file解析本地XML文件,若处理字符串形式的XML,改用parse_string即可。
  2. XPath筛选:利用XPath表达式/dataset/row[category/text()="mammal"]精准定位所有符合条件的row父元素,该表达式表示查找dataset下、子元素category文本值为mammal的row节点。
  3. 构建新文档:创建新的XML文档和根节点dataset,将筛选出的row节点通过深拷贝(cloneNode(1))添加到新根节点中,保留原节点的所有子元素结构。
  4. 输出结果:toString(1)会输出带缩进的格式化XML,与你预期的结果完全一致。

运行结果

执行上述代码后,输出的XML内容如下:

<?xml version="1.0" encoding="UTF-8"?>
<dataset>
  <row>
    <name>racoon</name>
    <category>mammal</category>
  </row>
  <row>
    <name>horse</name>
    <category>mammal</category>
  </row>
</dataset>

内容的提问来源于stack exchange,提问作者giordano

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.14 02:20:22