从 XML 结束标记填充数组

2024-03-03

我正在尝试创建一个字段名称数组,以便稍后在脚本中使用。正则表达式让我大吃一惊。我已经很久没有写代码了。字段名称嵌入在 XML 标记中,因此我想可以从第一行数据的结束标记中提取它们。我看不到如何正确填充数组......任何人都可以为我提供一些启示吗?

my $firstLineOfXMLFile = <record>DEFECT000179<\record><state>Approved<\state><title>Something is broken<\title>

my @fieldNames = $firstLineOfXMLFile =~ m(<\(.*)>)g; #problem, can't seem to grab the text within the end tags.

print @fieldNames;

非常感谢! -马特


您的示例数据不是 XML。你的斜杠是向后的。假设它is如果您尝试解析 XML,答案是“不要使用正则表达式”。

他们根本无法处理必要程度的递归和嵌套。

因此,考虑到这一点 - 假设您的示例数据实际上是格式良好的 XML,这是一个拼写错误,例如XML::Twig会很方便地做到这一点:

#!/usr/bin/env perl
use strict;
use warnings;

use XML::Twig;

my $twig = XML::Twig -> parse ( \*DATA );

#extract a single field value
print $twig -> root -> first_child_text('title'),"\n";
#get a field name
print $twig -> root -> first_child -> tag,"\n";
#can also use att() if you have attributes


print "Field names:\n";
#children() returns all the children of the current (in this case root) node
#We use map to access all, and tag to read their 'name'. 
#att or trimmed_text would do other parts of the XML. 
print join ( "\n", map { $_ -> tag } $twig -> root -> children );

__DATA__
<XML>
<record>DEFECT000179</record><state>Approved</state><title>Something is broken</title>
</XML>

这打印:

Something is broken
record
Field names:
record
state
title

您还拥有各种其他真正有用的工具,例如pretty_print用于格式化输出 XML,twig_handlers允许您在解析时操作 XML(对于purge), cut and paste移动节点,以及get_xpath让您使用 xpath 表达式根据路径和属性查找元素。

编辑:根据评论,如果您确实想从以下位置提取数据:

</something>

你的事情出了问题的是.*是贪婪的。您要么需要使用否定匹配 - 例如:

m,</[^>]>,g 

或者非贪婪匹配:

m,</(.*?)>,g

哦,鉴于你有一个反斜杠 - 你需要转义它:

my $firstLineOfXMLFile = '<record>DEFECT000179<\record><state>Approved<\state><title>Something is broken<\title>';
my @fieldNames = $firstLineOfXMLFile =~ m(<\\(.*?)>)g;
print @fieldNames;

会成功的。 (但是说实话,故意创建一些看起来像 XML 但实际上不是 XML 的东西确实是一件很糟糕的事情)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

从 XML 结束标记填充数组 的相关文章

随机推荐

  • 我可以使用 JavaScript 或 HTML 打开 IE 10 兼容性视图吗?

    如何在 Javascript 或 HTML 中以编程方式打开 IE 10 兼容性视图 我刚刚在其中添加了以下元标记标签 但它不起作用 有没有办法在 JS 中做同样的事情 我查了msdn上的兼容模式文章 here http msdn micr
  • Excel 中的动态数据验证(非 VBA!)[关闭]

    Closed 这个问题是无关 help closed questions 目前不接受答案 I got n持有的类别m产品 该列表未排序 例如如下 现在这就是我基本上想用这个列表做的事情 下拉菜单 数据验证 动态存储第一列的每个唯一值的列表
  • Scala String 与 java.lang.String - 类型推断

    在 REPL 中 我定义了一个函数 请注意返回类型 scala gt def next i List String i map 0 i reverse map 1 next i List String List java lang Stri
  • 泛型:访问新成员,而不是隐藏成员

    我遇到了泛型和新成员的问题 我编写了一个对 ObjectA 类型的对象进行操作的泛型类 ObjectB 派生自ObjectA 并隐藏了ObjectA 的一些成员 当我提供 ObjectB 的类型作为泛型类的类型参数时 我希望当我调用 Obj
  • Javascript fetch 返回 200 但没有数据

    我需要在下拉菜单中显示世界上所有国家 地区 所以我找到了这个api端点端点链接 https restcountries eu rest v1 all 当我在网络浏览器中复制并粘贴此端点链接时 我收到了包含所有数据的响应 国家 当我尝试将其嵌
  • 如何在 Android 中使用应用程序范围的 id 打开 facebook Messenger 聊天窗口

    我可以在我的应用程序中使用 graph api 获取应用程序范围的用户 ID 然后 如何在 android 中使用应用程序范围的 id 打开 facebook Messenger 聊天窗口 我们可以使用 global facebook id
  • 如何获取 Expo 的 assetlinks.json 的 sha256_cert_fingerprints?

    android通用深度链接的说明需要您上传 well known assetlinks json以供验证 Expo 深度链接文档指示您按照官方 Android 文档格式化文件 但该文档假设您正在使用 android studio 来构建您的
  • github 自动将组添加到每个新存储库

    我的组织中存在一个问题 每当创建新存储库时 其中一个组就会自动添加到具有读取权限的该存储库中 即使具有组织所有者权限 也无法将其从那里删除 它指出这是由组织所有者管理的 但在该组或组织设置中都看不到这样的设置 有什么想法如何更改 删除 自动
  • Selenium 中 waitForPageToLoad 的替代方案

    我在页面上有一系列链接 需要不同的时间来加载 我想捕获每个链接所花费的时间 我遇到的问题是 如果超过 waitForPageToLoad 时间 则会导致测试失败 并且我的其余链接没有得到测试 我知道我可以跳过测试中的可疑链接或设置超出预期的
  • JPA 中列表的保存顺序

    我对JPA有以下疑问 我可以保存 java util List 中元素的顺序吗 在我的应用程序中 将元素放入列表中的顺序很重要 但是当我从数据库中获取这些集合后 顺序并不相同 如预期 你能告诉我一种解决这个问题的方法吗 附 我放入集合中的实
  • 计算 DISTINCT 值的出现次数

    我试图找到一个 MySQL 查询 该查询将在特定字段中查找不同的值 计算该值出现的次数 然后按计数对结果进行排序 示例数据库 id name 1 Mark 2 Mike 3 Paul 4 Mike 5 Mike 6 John 7 Mark
  • GAE - 部署错误:“AttributeError:无法设置属性”

    当我尝试部署我的应用程序时 出现以下错误 Starting update of app flyingbat123 version 0 1 Getting current resource limits Password for avigma
  • Prestashop 送货时选择隐藏/显示付款方式

    我试图弄清楚如何在选择送货方式时显示 隐藏付款方式 我尝试了几个解决方案 但它对我不起作用 其中之一是这个
  • 如何在Flutter中像Youtube一样显示之前的时间

    我正在编写一个 flutter 应用程序来克隆一些 Youtube 功能Youtube API V3 该应用程序获取字符串形式的视频时间戳来自 YouTube 视频 API 每个时间戳都具有以下格式 YYYY MM DDTHH MM SSZ
  • 如何计算新点位于 Voronoi 图的哪个位置?

    我写了一个小脚本来显示 voronoi 图M点来自本教程 https docs scipy org doc scipy 0 18 1 reference generated scipy spatial Voronoi html I use
  • 如何获取 Xamarin.Android 的 Mono VM 的堆快照?

    背景 我正在尝试追踪 Xamarin Android 应用程序中的内存泄漏 使用 DDMS 和 Eclipse Memory Profiler 我能够查看哪些对象处于活动状态 当试图跟踪是什么让它们保持活力时 GC Root 我只看到 本机
  • 如何删除前导和尾随空格?

    我在用着awk gsub t t print in txt gt out txt删除前导和尾随空格 问题是输出文件实际上有尾随空格 所有行的长度相同 它们都用空格填充 我缺少什么 UPDATE 1 该问题可能是由于尾随空格不是 正常 空格而
  • Nuxt,转换不适用于子路由(使用 NuxtChild 显示)

    我无法为我的子路线进行转换 我有以下页面 pages child id vue child vue index vue 在索引和任何子路由之间导航都会触发转换 但是当从一个子路由导航到另一子路由时 不会发生转换 注意有静态路由 child和
  • extern 与 c 中变量的全局定义

    我有以下我感兴趣的源代码 include
  • 从 XML 结束标记填充数组

    我正在尝试创建一个字段名称数组 以便稍后在脚本中使用 正则表达式让我大吃一惊 我已经很久没有写代码了 字段名称嵌入在 XML 标记中 因此我想可以从第一行数据的结束标记中提取它们 我看不到如何正确填充数组 任何人都可以为我提供一些启示吗 m