命令行编辑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的主要目的是存储和传输数据,而不是显示数据。 阅读详情

相关推荐

电力工程师必看:GOOSE/SV/MMS三协议在智能变电站中的分工与联动实例

本文深入解析了智能变电站中GOOSE、SV、MMS三大核心通信协议的分工与协同机制。GOOSE协议作为过程层的“闪电信使”,负责毫秒级传输跳闸命令等事件信息;SV协议则传输精确同步的电流电压采样值流;而MMS协议作为站控层的“管理语言”,实现设备监控与数据管理。三者基于IEC 61850标准,在过程层、间隔层和站控层之间高效联动,共同构建了智能变电站稳定可靠的通信骨架。

jj890的博客 365

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

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

weixin_70208651的博客 3374

3DGS-to-PC实战指南:零代码实现3D高斯场景到点云/Mesh的高效转换

本文详细介绍了3DGS-to-PC工具如何实现3D高斯场景到点云/Mesh的高效转换,无需代码即可完成。通过实战案例和参数调优技巧,帮助用户快速掌握这一开源插件的使用方法,提升3D数据处理效率。特别适合建筑扫描、影视特效等领域的专业人士。

q1w3e5r7t9y的博客 273

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

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

cuyi7076的博客 1355

Mplus—交叉滞后面板模型(Cross-Lagged Panel Model, CLPM)

本文介绍交叉滞后模型相关知识,以及显变量模型与潜变量模型在Mplus中的语法。

m0_54401011的博客 1万+

欧姆龙SYSMAC STUDIO如何与基恩士SR-1000进行EIP通信

简要介绍一下扫码枪和欧姆龙sysmac的配置

weixin_42031602的博客 4780

XMLStarlet 命令行操作xml利器

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

qq_30534535的博客 3347

对MixPad精灵(触屏语音开关)进行解剖分析

概述 最近有点忙,已经很久没有更新文章了,对不起各位网友啦~ 这次对ORVIBO的新产品:MixPad精灵款的来个剖析,希望对大家有所帮助! 首先,我买了一台对应的设备,直接去官网采购,价格吗还算OK,400多的价格。 拆箱的过程我就不写了,简单的上个图就行了。 一、拆包: 主屏板包装盒(顶部): 主屏板包装盒(底部): 后盖电源部分无内容,我就不拍了,给优快云空间省点存储位置。 二、设备剖析开始 接下来,我们开始对设备进行剖析,步骤如下: 1、拆掉主屏板后盖板,...

LeeKwen的专栏 3943

XmlStarlet

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

chongtichi0163的博客 1597

Android Telephony主要模块及功能

Telephony的代码主要由五个模块组成 1.Telephony Frameworks 代码区域: frameworks/opt/telephony/ 其中主要的文件在如下目录 /frameworks/opt/telephony/src/java/com/android/internal/telephony/ 其中比较常见的有以下几类文件 1.BaseCommands、RIL构成R

泊客 7721

【python爬虫--爬取电商商品及对其销量、好差评等数据进行分析】Python爬虫爬取电商商品及大数据分析-实战

选择目标电商网站:这里选择爬取两个不同电商网站(比如京东、淘宝)上的商品数据,包括商品名称、价格、销量和评价信息。编写爬虫:通过爬虫获取商品信息并保存数据。数据清洗与对齐:将两个电商网站抓取到的数据进行统一清洗和对齐。数据分析:进行销量分析、好评与差评分析等。

Dreams°的博客 4013

xmlstarlet_开始使用XMLStarlet

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

cuxiong8996的博客 2474

ArcGIS Pro 制作这种地图海报

ArcMap 版本与 ArcGIS Pro 版本的制图功能相差太多,无论从美观上还是制图效率都远远优于 ArcMap,用了一段时间的 ArcGIS Pro ,真心推荐有条件的大家赶紧试一试!一个软件也能搞定一张不错的海报哦!----吐槽:好的设计真的是门花时间的活,这个教程大概花了我7小时左右,我都忘了我自己教程中截图多少张了!(可能是我速度太慢了)测试数据:阿里云盘分享-----北极海冰数据.https://www.aliyundrive.com/s/SUhsnqfkmXh。

J_Giser的博客 1428

有关XMLStarlet

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

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

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

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

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

weixin_39748445的博客 445

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

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

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

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

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、付费专栏及课程。

余额充值