使用 xmlstarlet 进行 XPath 查询

2024-02-01

我有与此类似的 XML:

<orders>
        <orderCompleteRequestType>
                <Head>
                        <Aufnr>11111</Aufnr>
                </Head>
                <Register>
                        <Id>180</Id>
                        <value1>11</value1>
                        <value2>22</value2>
                </Register>
                <Register>
                        <Id>181</Id>
                        <value1>3</value1>
                        <value2>43</value2>
                </Register>
                <Register>
                        <Id>160</Id>
                        <value1>5</value1>
                        <value2>25</value2>
                </Register>
        </orderCompleteRequestType>
        <orderCompleteRequestType>
                <Head>
                        <Aufnr>22222</Aufnr>
                </Head>
                <Register>
                        <Id>280</Id>
                        <value1>1</value1>
                        <value2>12</value2>
                </Register>
                <Register>
                        <Id>160</Id>
                        <value1>12</value1>
                        <value2>7</value2>
                </Register>
                <Register>
                        <Id>281</Id>
                        <value1>94</value1>
                        <value2>22</value2>
                </Register>
        </orderCompleteRequestType>
</orders>

我想以 CSV 格式从每个“orderCompleteRequestType”结构中选择一些值:

  • 头/奥夫恩
  • 注册/ID
  • 寄存器/值1
  • 寄存器/值2

使用以下命令行时:

xmlstarlet sel -T -t -m "/orders/orderCompleteRequestType" -v "Head/Aufnr" -o ";" -v "Register/Id" -o ";" -v "Register/value1" -o ";" -v "Register/value2" -n -n test.xml

I get:

11111;180
181
160;11
3
5;22
43
25

22222;280
160
281;1
12
94;12
7
22

所以,首先是 Register/Id 节点的所有值,接下来是所有 Register/value1,最后是所有 Register/value2,但我期望的是这样的:

11111;180;11;22
11111;181;3;43
11111;160;5;25

22222;280;1;12
22222;160;12;7
22222;281;94;22

谁能帮助我,因为我的大脑拒绝工作......


而不是匹配orderCompleteRequestType,考虑匹配Register反而...

xmlstarlet sel -T -t -m "/orders/orderCompleteRequestType/Register" -v "concat(../Head/Aufnr,';',Id,';',value1,';',value2)" -n test.xml

输出...

11111;180;11;22
11111;181;3;43
11111;160;5;25
22222;280;1;12
22222;160;12;7
22222;281;94;22

每个之间没有额外的换行符orderCompleteRequestType,但也许这没什么大不了的?如果是,那么编写 XSLT 并使用 xmlstarlet 调用它可能会更容易。

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

使用 xmlstarlet 进行 XPath 查询 的相关文章

随机推荐

  • Ruby 的 Object#taint 和 Object#trust 方法是什么?

    我正在阅读有关 Ruby 字符串方法的内容docs http www ruby doc org core 1 9 3 String html并遇到了这些方法 taint trust untaint untrust 我不知道它们是做什么的 我
  • BottomNavigationView:如何删除连字符标签

    实现 5 项 BottomNavigationView 始终显示标签 我使用以下方法
  • 如何在 extjs 中的网格页脚中添加总行数

    我想在网格页脚中添加总行数 我有商店中可用的总行记录 在网格中 用户选择降序排列 总计行显示为第一行 谁能告诉我如何避免这种情况 我将解释我的完整问题 例如 我有像 Target Target1 Target2 这样的网格视图 是从网络服务
  • Integer.parseInt(string) 实际上是如何工作的?

    最近被问到这个问题 不知道答案 有人可以从高层次解释Java如何获取字符 字符串并将其转换为int 通常这是这样完成的 初始化结果为 0 for each character in string do this 结果 结果 10 从字符中获
  • 如何用笛卡尔绘制波纹圆?

    I m looking for a way to plot a corrugated circle https www mypandakitchen com 1656 large default emporte pieces rond on
  • 扩展界面生成器中的属性检查器

    是否可以使用继承自 UIView 的自定义类的附加属性来扩展界面构建器的属性检查器 现在不行 Interface Builder 允许您通过 Interface Builder 插件为您的对象实现自定义检查器 不过 IB Kit 目前不支持
  • 如何从 ipython 启动twisted的reactor

    我需要从 ipython 中启动一个twisted reactor 以允许继续交互 Ipython 的手册页引用了twisted 但我无法理解应该如何继续 文档引用了 IPython kernel twistedutil 所以我的印象是它应
  • 在 ASP.NET core 中添加迁移时不考虑新的更改

    我和一个朋友正在作为队友参与 ASP NET Core 项目并使用以下工具共享数据github 每次从 who 中提取更改时github 应该删除Migration folder为了添加迁移而不会出现任何错误 否则 我们会收到以下错误 数据
  • 寻找第 N 个孪生素数

    我试图解决 SPOJ 上的问题 我们需要计算第 n 个孪生素数对 相差 2 的素数 n 可以大到 10 5 我尝试使用筛子进行预先计算 我必须筛选最多 10 8 才能获得最大的 n 个孪生素数 但时间限制很严格 2s 并且超时 我注意到人们
  • Visual Studio 2012 中数据库优先实体框架模型的 MVC4 支架

    我在使用 Visual Studio 2012 时遇到问题 尝试添加带有脚手架的 MVC4 控制器 理想情况下 我希望在与我的 Web 应用程序分开的程序集中使用添加新项 ADO NET 实体数据模型 即不是代码优先 从数据库生成实体框架模
  • 如何提示 Google Smart Lock 使用特定输入字段作为网站中的用户名

    我一直在尝试搜索一些有关如何提示 Chrome 的 Google Smart Lock 使用特定输入字段作为与用户名关联的输入字段的文档 但没有任何运气 对于密码 它与使用的一样完美type password 但是 当涉及多字段表单中的用户
  • 相对于 PHP 4“opendir/readdir/closedir”,使用 PHP 5 DirectoryIterator 到底有什么好处?

    使用 PHP 5 DirectoryIterator 到底有什么好处 dir new DirectoryIterator dirname FILE foreach dir as fileinfo handle what has been f
  • 单元格格式四舍五入并显示 2 位小数

    我有一个单元格格式为数字并保留 2 位小数 实际数字是 69 30217 所以在我的单元格中 想象一下单元格 A1 它看起来像 69 30 还行吧 对于该单元格 我正在进行一些串联 因此如果我执行以下操作 E5 该数字显示为 69 3021
  • 如何让 tkinter 消息框出现在顶层前面

    我正在使用 Python 3 和 tkinter 编写一个程序 其中顶层最 初出现在根窗口的中心 如果顶层没有移开 它会覆盖任何可能出现的显示错误消息的消息框 消息框出现在根窗口前面 但在顶层后面 命令行中的简单示例显示会发生什么 gt g
  • 为什么枚举上的开关需要默认值?

    通常 switch 语句中不需要 default 但是 在以下情况下 只有当我取消注释默认语句时 代码才能成功编译 有人能解释一下为什么吗 public enum XYZ A B public static String testSwitc
  • 如何更改列表视图中复选框的文本?

    我知道这是一个愚蠢的问题 但我无法完成它 我想在单击时更改 ChekcBox 的文本 它会根据需要进行更改 但奇怪的是当我滚动列表视图时 该文本被分配给列表视图中存在的其他复选框 似乎每次滚动时列表视图都会重新加载 以下是我到目前为止所尝试
  • Android:了解可绘制文件夹

    我有一张尺寸为 250 70 像素的图像drawable文件夹 我刚刚开始 Android 开发 所以我创建了drawable文件夹中res 并且我有相同的图像 但尺寸更高drawable large文件夹 但图像看起来并不像我预期的那样
  • 在 Visual Studio 2005 中使用 nFringe 调试 UDK

    这是一个非常小众的问题 所以我不期望得到很大的回应 基本上 我正在通过一些教程来学习如何使用 UDK 即这个 http forums epicgames com showthread php p 27043379 post27043379
  • Android SearchView 列表视图过滤器

    我有一个活动 顶部有一个操作栏和一个搜索视图 另外 我正在使用自定义列表视图 并且希望从搜索视图中输入的关键字中进行过滤 这些关键字应与列表视图项中的特定文本视图相关联 在监听器的 onQueryTextChange String Text
  • 使用 xmlstarlet 进行 XPath 查询

    我有与此类似的 XML