使用 XML::LibXML 迭代 xml 节点的 perl 脚本

2024-01-03

我正在尝试编写一个 perl 脚本来迭代某些节点并获取 xml 文件中的值。

我的 XML 文件如下所示并保存为 spec.xml

<?xml version="1.0" encoding="UTF-8"?>
<WO xmlns="http://www.example.com/yyyy" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" >
  <WOSet>
    <SR>
     <FINISHTIME>2013-07-29T18:21:38-05:00</FINISHTIME>
     <STARTTIME xsi:nil="true" />
     <TYPE>SR</TYPE>
     <DESCRIPTION>Create CUST</DESCRIPTION>
     <EXTERNALSYSTEMID />
     <REPORTEDBY>PCAUSR</REPORTEDBY>
     <REPORTEDEMAIL />
     <STATUS>RESOLVED</STATUS>
     <SRID>1001</SRID>
     <UID>1</UID>
     <SPEC>
       <AVALUE>IT</AVALUE>
       <ATTRID>CUST_DEPT</ATTRID>
       <NALUE xsi:nil="true" />
       <TVALUE />
     </SPEC>
     <SPEC>
       <AVALUE>001</AVALUE>
       <ATTRID>DEPT_CODE</ATTRID>
       <NVALUE xsi:nil="true" />
       <TVALUE />
     </SPEC>
  </SR>
</WOSet>
  </WO> 

当我运行下面的脚本时,我既没有得到输出,也没有得到任何错误来了解在哪里修复问题......

我不是 Perl 专家,希望这里的专家能提供一些帮助...

#!/usr/bin/perl
use XML::LibXML;
use strict;
use warnings;
my $file = 'spec.xml';
my $parser = XML::LibXML->new();
my $tree = $parser->parse_file($file);
my $root = $tree->getDocumentElement;

foreach my $atrid ( $tree->findnodes('WO/WOSet/SR/SPEC') ) {
    my $name =  $atrid->findvalue('ATTRID');
    my $value =  $atrid->findvalue('AVALUE');
    print $name
    print " = ";
    print $value;
    print ";\n";
}

我的预期输出是

 CUST_DEPT = IT
DEPT_CODE = 001

XML 不包含任何名为WO在空命名空间中。您想要匹配名为的元素WO in the http://www.example.com/yyyy命名空间。

#!/usr/bin/perl

use strict;
use warnings;

use XML::LibXML               qw( );
use XML::LibXML::XPathContext qw( );

my $file = 'spec.xml';

my $parser = XML::LibXML->new();
my $doc = $parser->parse_file($file);
my $root = $doc->getDocumentElement;

my $xpc = XML::LibXML::XPathContext->new($doc);
$xpc->registerNs(y => 'http://www.example.com/yyyy');

for my $atrid ( $xpc->findnodes('y:WO/y:WOSet/y:SR/y:SPEC') ) {
    my $name  = $xpc->findvalue('y:ATTRID', $atrid);
    my $value = $xpc->findvalue('y:AVALUE', $atrid);
    print "$name = $value\n";
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 XML::LibXML 迭代 xml 节点的 perl 脚本 的相关文章

  • STDOUT->autoflush(1) 在 Perl 中做什么?

    我找到了有关 Perl 中自动刷新的各种信息 但找不到任何提及格式完全相同的行 STDOUT gt autoflush 1 这包含在我正在分析的程序中 我想更好地了解它的作用 程序开头还有这样一段话 use IO Handle 我认为这可能
  • Perl - HTTP::代理捕获 XHR/JSON 通信

    网站http openbook etoro com main http openbook etoro com main 有一个实时提要 由 javascript 通过 XHR keep alive 请求生成 并以 gzip 压缩 JSON
  • 当一个模块安装了两个版本时 Perl 会做什么?

    我在正在使用的远程机器上没有 root 访问权限 因此我使用 cpanm 和 local lib 的组合 如下所述here https stackoverflow com a 2980715 1156644将 CPAN 模块安装到我的本地目
  • 我的 Perl 脚本中的 findnodes 语句有什么问题?

    我有一个简单的 xml 文件 如下所示
  • 如何使用 Perl 从 NCBI 获取 FASTA 核苷酸格式的基因特征?

    我可以手动下载 FASTA 文件 如下所示 gt lcl CR543861 1 gene 1 ATGCTTTGGACA gt lcl CR543861 1 gene 2 GTGCGACTAAAA 通过单击 发送到 并选择 基因特征 FAST
  • Bash - 在 perl 正则表达式中使用变量以及匹配组

    这是我在 stackoverflow 上的第一篇文章 如果我错过了一些重要的内容 请原谅我 我目前遇到以下问题 目标是根据我准备的文件列表动态替换端口号find 这些文件中的所有端口均以数字 4 开头 有 5 位数字 现在是棘手的部分 我只
  • Moose:属性值更改时缓存的计算结果会过期吗?

    在我们的类中 我们有一个模式 我们创建一个属性来表示 计算值 出于显而易见的原因 我们想要缓存计算值 然后当基础值之一发生变化时使缓存失效 所以我们目前有这个 package FooBar use Moose has foo gt acce
  • Perl 导入到我的所有包中?

    我倾向于经常使用 Data Dumper 最终我的 pl 代码中每个包的顶部都有以下样板 use strict use warnings use Data Dumper Data Dumper Deparse 1 Data Dumper P
  • 如何构建 Perl Web 服务基础设施

    我有许多用于管理多服务器基础设施的脚本 其中一些脚本需要 root 访问权限 一些需要访问数据库 并且大多数脚本都是基于 perl 的 我想将所有这些脚本转换为非常简单的 Web 服务 可以从不同的应用程序执行 这些 Web 服务将接受常规
  • 读入模板文件,使用用户输入填充并生成新文件

    我正在尝试读取如下所示的模板配置文件 template config path to speedseq package binary directory SPEEDSEQ BIN DIR usr local packages Sequenc
  • Perl 中的全局变量、子程序变量问题

    如何将子程序变量值转移到另一个子程序变量中 我可以使用全局变量吗 sub foo my myvar Hello sub foo1 my myvar1 myvar how can I get the Hello from myvar 我尝试使
  • 由于 lpcap,CPAN 安装 Net::Pcap 和 Packet 模块失败

    最近 我尝试通过 cpan 安装 perl 模块 Net Packet 和 Net Pcap 但它抱怨找不到 pcap 库 所以我正在搜索 cpan 在安装模块时是否接受外部 lib include 目录 但到目前为止还没有运气 looki
  • 我怎样才能挂钩 Perl 的 use/require 以便抛出异常?

    如果文件已经加载 是否可以挂载到use require所以我可以抛出异常 在我即将到来的nextgen blacklist http github com EvanCarroll nextgen blob blacklist lib nex
  • 你能挽救我的负面回顾示例来传达数字吗?

    在 高级正则表达式 一章中掌握 Perl http oreilly com catalog 9780596527242 我有一个损坏的示例 我无法找到一个很好的修复方法 这个例子可能为了自己的利益而试图变得太聪明 但也许有人可以帮我解决它
  • 如何使用 Perl CGI 脚本提供图像?

    我的 Google fu 让我失望了 如何使用 Perl 提供已生成的图像 Example img src getimage pl getimage pl 里有什么 干得好 usr bin perl w my file inner nav
  • 如何将会话管理添加到简单的 Perl CGI 网页?

    我有一个简单的网页 到目前为止不需要任何登录 它是用 Perl CGI 编程的 我想知道添加会话支持以便获得登录信息的步骤 我不需要非常复杂的方法 因为网页非常简单 另外 我想要一些关于支持 Perl 会话所需的技术 库的建议 我在很多很多
  • 使用 -T 开关运行时 $ENV{ENV} 不安全

    当我尝试最后一个例子时perlfaq5 如何计算文件中的行数 http perldoc perl org perlfaq5 html How do I count the number of lines in a file 我收到一条错误消
  • 在 Perl 中使用数据引用的正确方法

    我有一组想要处理的数据 为了简化我的代码 最好通过指向原始数据的引用数组来访问我的数据的某些子集 比解释更好的是 我写下了这个例子 它还没有工作 最后 我想更新原始数据 而不必更新所有子集 用 Perl 可以做这样的事情吗 usr bin
  • Perl:HTTP::微小删除留下损坏的锚标记

    我编写了一个脚本 该脚本收集从数据库读取的缓冲区内的所有 URL 检查该页面是否仍然存在 并使用 HTTP Tiny 从缓冲区中删除 URL 如果该 URL 无法访问或返回无效 问题是 HTTP Tiny 删除左锚标记 例如此处无效的文本
  • Perl:测试输入阅读器?

    有没有一种方法可以使用标准 Test 等模块自动测试 Perl 程序是否正在读取输入 例如标准输入正确吗 例如 测试一个从 STDIN 读取两个整数并打印它们之和的程序 这不是 100 清楚你的意思 我会回答假设你想编写一个测试脚本来测试你

随机推荐

  • 我应该在函数中抛出 IllegalArgumentException 吗?

    我正在构建一个包含大量计算的科学软件 当然参数可能有错误的长度等 所以我使用IllegalArgumentException类 因为它似乎是这个问题的正确名称 但我应该把throws IllegalArgumentException在函数定
  • 如何使用 python 中的循环创建多个目录?

    我想用循环创建 10 个目录 我尝试了以下代码 import os pathname 1 directory C Directory Path Name str pathname while pathname lt 11 if not os
  • 右移和有符号整数

    在我的编译器上 以下伪代码 值替换为二进制 sint32 word 10000000 00000000 00000000 00000000 word gt gt 16 产生一个word位字段如下所示 11111111 11111111 10
  • 在tomcat中共享文件夹

    如何使用 tomcat 6 浏览器访问文件夹 我想我需要向 web xml 添加上下文 我想 所以当我导航到http localhost 8080 myfiles http localhost 8080 myfiles我希望看到 c tem
  • 如何在 Windows 上以提升的权限运行脚本?

    我一直在试图弄清楚如何运行一堆都需要提升权限的应用程序 DameWare MSC exe PowerShell exe 和 SCCM Manager Console 等应用程序都在我的日常工作中使用 我现在运行的是Win7 计划最终迁移到W
  • Wp7 键盘支持多少种语言以及如何设置

    我希望为 Windows Phone 7 创建一个翻译应用程序 我不知道如何去做 这里是问题 我想知道当我在文本框中输入文本进行翻译时 我该怎么做 1 假设 我的Windows手机是中文的 如何将其更改为其他语言 例如法语 德语 俄语等 我
  • C 语言的限制输出

    在 C 中 我想将字符串限制为前 8 个字符 例如 我有 char out printf c str 我怎样才能使它只返回前 8 个字符 您可以通过设置格式说明符中的精度来限制长度 printf 8s str 这将打印up to指向的以空字
  • Maven Cobertura 插件未生成coverage.xml

    我试图生成一个coverage xml 以便我可以在Hudson 的Cobertura 插件中引用它 但该文件没有被创建 我已将以下内容添加到我的 POM 中
  • 如何在.net core中使用反射通过名称查找类的名称空间?

    我有一个仅包含类名称的字符串列表 我需要使用 Activator 创建它们的实例 但它们都可以位于不同的命名空间中 类将来可以移动到另一个名称空间中 因此我无法对其进行硬编码 如果您知道永远不会有多个具有相同名称的类型驻留在不同的命名空间中
  • 检测已安装的浏览器,以便 Process.Start("chrome") 不会出错

    我试图让用户选择我的应用程序用来启动网址的浏览器 目前它使用默认浏览器 但有些人想指定不同的浏览器 我想仅显示列表中已安装的浏览器 并且我将像这样启动它们 Process Start chrome url 更多信息 https learn
  • cakephp 复选框显示额外的隐藏字段

    foreach apps as app echo this gt Form gt input Application array type gt checkbox id gt app Application description div
  • Maven 发布:如何跳过部署步骤?

    要发布我正在使用的应用程序maven 发布 插件 此过程中的一个步骤是将版本部署到存储库中 我想避免这一步 但是当我从 pom 文件中删除 distributionManagement 时 出现错误 Deployment failed re
  • 更改端口号后无法在 Visual Studio 中调试?

    我添加了这一行 UseUrls http 5000 使其他主机的客户端能够访问 Web api public static void Main string args var host new WebHostBuilder UseKestr
  • 为什么sbt找不到KafkaUtils?

    我在使用 SBT 编译的代码 来自 Kafka 的 wordCount 中出现此错误 error home hduser sbt project project1 src main scala sparkKafka scala 4 35 o
  • Python:使用已知 URL 但未知驱动器号访问 Windows 映射网络驱动器

    我正在尝试编写一个可以在远程 Linux 服务器上移动和复制文件的 Python 脚本 但是 我不能假设运行该脚本 在 Windows 上 的每个人都会将此服务器映射到同一个字母 我不想提示用户输入正确的盘符 而是想简单地通过服务器的网络
  • SQLAlchemy db.session.query() 与 model.query

    对于简单的返回所有结果查询 是否应该优先选择一种方法 我可以在网上找到两者的用途 但无法真正找到任何描述差异的内容 db session query my model name all my model name query all 我觉得
  • RxAndroid:Schedulers.io() 线程上的 UI 更改

    我在 IO 线程上有一个简单的工作 即更改主屏幕壁纸 之后我尝试在 UI 线程上运行一些动画 AppObservable bindFragment this Observable just 0 observeOn Schedulers io
  • 实体框架 4 - 处理非常大(1000+表)的数据模型?

    我们有一个包含超过 1000 个表的数据库 并希望考虑使用 EF4 作为我们的数据访问层 但我担心将其用于如此大的数据模型的实际情况 我见过这个问题 https stackoverflow com questions 1519643 how
  • Postgres Interval 与 Dapper 和 npgsql 不起作用

    我正在将 Dapper 与 Postgres npgsql 一起使用 但在使用以下命令执行 SQL 命令时遇到问题INTERVAL 该命令在我的代码之外运行良好 我收到错误 Npgsql PostgresException 42601 1
  • 使用 XML::LibXML 迭代 xml 节点的 perl 脚本

    我正在尝试编写一个 perl 脚本来迭代某些节点并获取 xml 文件中的值 我的 XML 文件如下所示并保存为 spec xml