命令行编辑XML的最佳实践(修改版xmlstarlet)

Linux命令行XML格式化实战:xmllint、XMLStarlet与xml_pp对比 XML作为可扩展标记语言,其结构化特性使其成为数据交换和配置文件的主流格式。然而,压缩格式的XML文件缺乏缩进和换行,严重影响了可读性和维护效率。通过解析器构建文档对象模型(DOM)树并重新序列化,可以实现XML的美化(pretty-print),使其层次分明、易于阅读。这一过程不仅提升了开发效率,还减少了因格式混乱导致的错误。在Linux环境下,命令行工具如xmllint、XMLStarlet和xml_pp提供了高效的格式化解决方案。xmllint基于Libxml2库,严格遵循W3C标准,适合快速格式化和 阅读详情

背景介绍

最近搭建hadoop分布式环境时,参考了网上很多资料并成功搭建起来。为了将搭建步骤记录下来且方便以后再次使用,尝试将所有配置信息通过脚本的方式进行自动化(主要也是为了日后使用Docker)。因此遇到了在shell中配置XML(如 $HADOOP_HOME/etc/hadoop/core-site.xml)的需求。

初步调查

通过搜索,发现很多网页都是推荐 xmlstarlet 命令,其有 ed(edit) 命令,可以编辑 xml 文件,并通过 -i/-a/-s 等命令即可在指定 xpath 下 插入/追加/建立子节点 。 不过测试发现,当要添加的节点信息比较复杂时,保存的节点信息会被转码。如想生成如下xml信息时:

    <configuration>  
        <property>  
            <name>fs.defaultFS</name>  
            <value>hdfs://localhost:9000</value>  
        </property>  
        <property>  
            <name>hadoop.tmp.dir</name>  
            <value>/usr/hadoop/tmp</value>  
        </property>  
    </configuration>  

尝试了多种命令组合(如):

xmlstarlet ed -s /configuration -t elem -n ""  \
  -v "<property><name>fs.defaultFS</name><value>hdfs://localhost:9000</value></property> \
      <property><name>hadoop.tmp.dir</name><value>/usr/hadoop/tmp</value></property>" \
  hadoop/core-site.xml

结果却如下所示(进行了转码,根本不是我想要的结果):

<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
<>&lt;property&gt;&lt;name&gt;fs.defaultFS&lt;/name&gt;&lt;value&gt;hdfs://localhost:9000&lt;/value&gt;&lt;/property&gt;&lt;property&gt;&lt;name&gt;hadoop.tmp.dir&lt;/name&gt;&lt;value&gt;/usr/hadoop/tmp&lt;/value&gt;&lt;/property&gt;</></configuration>

更改xmlstarlet源码

考虑到xmlstarlet是开源的,因此决定下载并分析其源码,进行改造,从而满足我的要求。
经过两天的分析和修改,总算完成了改动,并将代码共享到 github 上。

使用方式

下载源码后,执行以下命令即可编译,安装和使用(示例即是修改 hadoop/core-site.xml)。

  ./configure && make && make install
注意:
  1. 在 make install 时根据你的系统和账号,可能需要 sudo;
  2. 我在 Ubuntu 16.4 上编译安装的后的 可执行文件名是 xml 而不是 xmlstarlet
  3. 通过 make check 可以执行其单元测试,由于更改了 ed 命令的执行效果,有些以前能通过的测试现在无法通过。通过分析,已经更改了几个,但有些示例没有看懂作者的意图,暂未更改。通过比较 ed-backref2 等文件的修改,就可以发现当采用修改版本的 xmlstarlet 来加入复杂节点信息时将会变得多么简单。
  4. 如果发现问题或需求,可以在 github 上提出issue,有时间的话我会尽量更改。并联系原作者,希望将该功能合并进官方版本。
EditPlus中xmlstarlet的XML格式化实现 EditPlus 是一款轻量级但功能强大的文本、HTML和程序代码编辑器。它提供了语法高亮、代码折叠、用户工具、宏和自动完成等功能,尤其受到程序员的喜爱。作为开发人员,拥有一款能够提高编码效率的工具是至关重要的,EditPlus 正是满足了这一需求。XML(可扩展标记语言)是一种用于存储和传输数据的标记语言,它与HTML共享许多相同的语法规则。XML是一种标记语言,这意味着它使用标签来定义对象和对象的数据内容。XML的主要目的是存储和传输数据,而不是显示数据。 阅读详情

相关推荐

基于ESP32与PCM5102的WiFi无损音频传输系统设计与实现

本文详细介绍基于ESP32与PCM5102的WiFi无损音频传输系统设计与实现。通过I2S接口直接传输PCM数据,避免SRC重采样,实现真正的HIFI级音质。涵盖硬件连接、软件架构、网络传输优化及实际音质对比,为音频爱好者提供高性价比的无损无线音频解决方案。

rnn9storyteller的博客 948

Linux命令:用于处理 XML 文档的强大的命令行工具xmlstarlet 详解

xmlstarlet 是一个强大的命令行工具,用于处理 XML 文档。它可以用来执行各种操作,如格式化、查询、修改、验证和转换 XML 数据。xmlstarlet支持 XPath 和 XQuery 表达式,这使得在命令行中处理 XML 文档变得非常方便。XmlStarlet是一个功能强大的XML处理工具,它通过命令行界面提供了丰富的操作命令,使得用户可以轻松地进行XML文档的查询、修改、验证、转换等操作。在自动化脚本中处理XML数据,在日常工作中处理XML文件,XmlStarlet都是一个不可或缺的工具。

weixin_70208651的博客 3374

Hyper-V集群部署指南

工欲善其事,必先利其器。搭建一个方便管理的服务集群,是分布式学习很重要的环境。 目前流行的虚拟机产品主要为Vmware 和 win10自带的Hyper-V(win10家庭版无此功能),网上关于Vmware的教程更多,显然它更容易上手,但Hyper-V也算是一个很不错的产品,这里记录一下我的学习过程: 目录 Hyper-V的安装 服务集群的搭建 虚拟机的网络通信 NAT网络的搭建 端口映射 Linux的静态IP 虚拟机的自启动问题 Hyper-V的安装 也不能算说是安装,如果你的win1

Swing 6919

命令行xml处理_命令行XML处理

就像我不愿说的那样,XML工具还没有达到类似Unix的命令行中可用的文本实用程序的便利程度。 对于面向行的,空格或逗号分隔的文本文件,使用sed , grep , xargs , wc , cut ,pipe和短壳脚本的巧妙组合可以完成的工作非常令人惊讶。 我认为,XML并不是天生就可以抵抗平面文本文件所享受的模块化处理。 XML开发人员只需要从经验中学习将XML工具组成组件的最佳方法。 ...

cuyi7076的博客 1355

MATLAB数据可视化:pcolor函数从入门到精通(附colormap调色秘籍)

本文深入解析MATLAB中pcolor函数的数据可视化应用,从核心机制、坐标网格指定到常见陷阱规避。重点揭秘colormap调色秘籍,涵盖内置色系选用原则、个性化定制方法及高级渲染技巧,助你创作出信息准确、视觉出色的专业图表,精通从数据到出版级图表的全流程。

kafka6courier的博客 246

Echocardiography Image Segmentation: A Survey(超声心动图图像分割方法综述--中文翻译)

Echocardiography Image Segmentation: A Survey 摘要:尽管超声图像的获取是较廉价,并且免于辐射的,但是超声图像因为信号衰减、斑点噪声等干扰,使得超声图像的分割具有较大挑战。本文将近些年应用于超声心动图像分割的相关方法进行了分类总结,并列出了10篇具有原创思想的文章,这些文章具有特殊的临床使用价值或是对于超声心动图像分割具有指导意义。 关键词:超声心动...

mrj4124的博客 5097

XMLStarlet 命令行操作xml利器

XMLStarlet用于从命令行处理 XML 的开放源码工具箱 XMLStarlet 是一种开放源码的 XML 工具箱,可以在 UNIX®、Mac OS® X 或 Microsoft® Windows® 命令行中使用。XMLStarlet 可以验证 XML、格式化 XML、选择其中的一部分、用 XSLT 进行转换甚至编辑。这意味着,不需要使用 Perl 或 Java® 之类的编程语言

qq_30534535的博客 3347

SAP中贸易伙伴的应用原理简析

公司也称为贸易伙伴,是出具合并报表的组织单位,可以为客户和供应商分配公司(贸易伙伴),用于识别集团内关闻公司间的业务往来,在编制合并报表时进行往来账务的计算处理。 如下图某贸易伙伴公司(关联方名称G0059)在我方公司的SAP系统中有多重身份(即是供应商,又是客户)。那么在我方公司SAP系统中建立起公司(贸易伙伴),并关联到供应商和客户主数据中。之后,就可以通过G0059这个贸易伙伴名称来识别与该贸易伙伴间的往来业务。 相应的配置设定如下: 定义公司(贸易伙伴或关联方) 会计凭证中会

专注SAP应用技术文章写作,致力于拉近用户与系统间的距离; 9815

XmlStarlet

XmlStarlet是一个xml处理工具。它可按xpath对xml获取元素或者修改元素。 不带参数运行xmlstarlet,就会输出xmlstarlet的功能列表。下面是截取的一部份。 XMLStarlet Toolkit: Command line utilities for XML...

chongtichi0163的博客 1597

【ARM Trace32(劳特巴赫) 使用介绍 1.3 - ARM 系统调试中常见的挑战】

每一个独立的gust os或者一个OS 内部里面美格独立的进程它使用虚拟地址是可能是重叠的,比如linux中每个用户进程它的运行地址(虚拟地址)都是0x0,这时如果想去同时调试所有进程,那么必须要有个办法把这些进程区分开来,trace32 就在虚拟地址前面加前缀的方法,这个前缀称为space id, 这个space id 实际上就是processor id或者是task id, 这样就可以把一个os内部的不同的进程区分开来。如果工具和内核中的连接是可以建立起来的,那么接下来就是调试工具使用的问题了。

CodingCos的博客 1961

从 0 到 1 玩转小智 AI 智能音箱:开发教程 + 实战项目全攻略

如果说 MCP 是工具箱,那 SDK 就是 “技能模板”—— 小智音箱的自定义技能本质是 “意图识别 + 逻辑响应” 的组合,就像给嵌入式设备写驱动程序,只要按规则调用接口,就能实现各种功能。小智 AI 音箱的开发门槛并不高,核心是利用 MCP SDK 封装好的接口,结合嵌入式开发的 “硬件对接 + 逻辑编程” 思维,就能实现各种自定义功能。从环境搭建到技能开发,再到实战项目落地,每一步都是对 “软件控制硬件” 的实践 —— 而这正是嵌入式开发的核心魅力。

weixin_42300449的博客 1193

xmlstarlet_开始使用XMLStarlet

XMLStarlet是可以在UNIX®,MacOS®X或Microsoft®Windows®命令行上使用的开源XML工具包。 您可以使用XMLStarlet来验证XML,对其进行格式化,选择其部分,使用XSLT进行转换,甚至进行编辑。 这意味着您可以将XML实用程序放入您的Shell脚本中,而无需使用诸如Perl或Java®之类的编程语言编写任何自定义代码。 要开始使用XMLStarlet...

cuxiong8996的博客 2474

汽车电子RTOS--AUTOSAR OS

AUTOSAR OS(AUTomotive Open System ARchitecture Operating System)是AUTOSAR(汽车开放系统架构)标准中的一个重要组件,它是一个专门为汽车电子控制单元(ECU)设计的实时操作系统(RTOS)。AUTOSAR OS旨在提供一个标准化的软件平台,以促进不同供应商和汽车制造商之间的组件复用和协同开发,提高软件质量和降低成本。

MHD0815的博客 1798

有关XMLStarlet

何时使用 shell下处理xml文件的一个可选方案(个人觉得比使用python、php处理xml方案好,感觉与shell下其它小工具能更好的整合与协作) 阅读建议 有XML、XPATH的基础,这里有快餐教教程 http://www.w3school.com.cn/x.asp 相关资源 1)官方网址,http://xmlstar.sourceforge.net/ 2)使用介绍,官方 ht

技术的学习与积累是个技术活 3923

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

Linux命令怎么获取xml文件,[原]linux 命令行下的 XML 处理利器 xmlstarlet 学习

长久以来,在shell 下处理xml一直是楼主头疼的问题,用 regex 匹配不是不可以,但对于复杂的需求就有点捉襟见肘了,例如这样一个问题 :查找某个元素值 item 的值等于value的节点,并把这个节点的另外一个元素值 item2 的值替换为另外一个值 value2。对于这种需求,用 regex (sed) 处理起来很是痛苦,即便你用了 sed 的 pattern space ,也是很麻烦,...

weixin_39748445的博客 445

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

editplus XMLStarlet格式化xml 文件

使用editplus打开xml文档,发现文件内容没有格式化,非常难看,使用IE9打开这个xml文档是格式化的,但是IE9打开不能编辑。 在网上找了一些资料发现能够通过一个小插件来是editplus格式化xml,参考文献:http://hi.baidu.com/homeylife/blog/item/7f6f7daff27203d47dd92a46.html 在http://xmlstar.so

Love_4_J的专栏 1391

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

XMLStarlet 1.4.1 发布,XML 工具

XMLStarlet 1.4.1 修复了一个无效编辑操作导致程序崩溃的问题,文档可从 tar 包中进行构建并安装到当前路径。 XMLStarlet 包含一组命令行的 XML 工具,主要用于对 XML 文档进行转换、查询、校验以及编辑。...

weixin_33695082的博客 245

常用 DOS 命令 xml

xml  命令行下面操作xml 文件的工具,有 windows 版本与 linux 版本 , 需要下载 http://xmlstar.sourceforge.net/.   XMLStarlet Toolkit: Command line utilities for XML Usage: xml [&lt;options&gt;] &lt;command&gt; [&lt;cmd-op...

ThInk.Cn的专栏 627

editplus将html转换xml,editplus格式化xml文档

使用editplus打开xml文档,发现文件内容没有格式化,非常难看,使用IE9打开这个xml文档是格式化的,但是IE9打开不能编辑。在http://xmlstar.sourceforge.net/download.php下载XMLStarlet,然后将其解压,将解压文件中的xml.exe文件放到editplus安装目录下。然后打开editplus->tools->configue u...

weixin_42513152的博客 562

超好用的XML工具

XMLStarlet Command Line XML Toolkit 主要功能有如下Check or validate XML files (simple well-formedness check, DTD, XSD, RelaxNG)Calculate values of XPath expressions on XML files (such as running sums,

xwk的专栏 1182

linux的shell脚本,在公网IP变化后,修改配置文件中相关的值

Xmlstarlet是一个功能强大的命令行工具,专门用于处理XML文档。它提供了丰富的命令集,支持查询、编辑、转换、验证和格式化XML数据。当视频监控平台部署在内网环境下,而在其他不同网络环境下的设备需要注册到该内网视频监控平台的情况下,可以通过动态域名的方式,将注册端口映射到公网,设备通过域名+端口的方式,可以注册到内网平台中进行播放。在这种情况下,视频监控平台的配置文件需要进行一些参数的修改,以满足视频流可以正常传输。因此当公网IP发生变更后,需需要通过一个脚本,实现自动修改相关参数

weixin_70208651的博客 1114

Editplus 配置xml格式化插件

使用editplus打开xml文档,发现文件内容没有格式化,非常难看,使用IE9打开这个xml文档是格式化的,但是IE9打开不能编辑。 在网上找了一些资料发现能够通过一个小插件来是editplus格式化xml,参考文献:http://hi.baidu.com/homeylife/blog/item/7f6f7daff27203d47dd92a46.html 在http://xmlstar.so

白不懂黑的静的专栏 1769

EditPlus工具添加XML格式化插件

      使用 EditPlus 打开 XML 文档,发现文件内容没有格式化,非常难看,使用 IE 浏览器打开这些 XML 文档是格式化的,但是 IE 浏览器却不能编辑。      在网上找了一些资料发现能够通过一个小插件“xmlstarlet”来实现 EditPlus 格式化 XML文档。具体步骤如下:      1. 在 http://xmlstar.sourceforge.net/down...

漂石的手艺(技术)活儿 2080
上一篇: 搜索jar包(binary和sources)中的代码
下一篇: ssh免密码登录的最佳实践(Ubuntu 16.4 + CentOs 6 中验证通过)
fishjam
博客等级 码龄23年 170粉丝 37原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值