通过XSH在命令行中使用XML

日期: 2008-06-12 作者:Ed Tittel 来源:TechTarget中国 英文

XSH是一个命令行的XML外壳程序,使得开发者没有必要再做这种细小繁琐的工作,而且还允许你在没有建立再利用代码的情况下查询和操作文档数据。   当需要浏览树型文档结构并从其枝叶上采摘数据的时候,许多XML开发者使用XSLT引擎或其他工具来完成这个任务。XSH是一个命令行的XML外壳程序,使得开发者没有必要再做这种细小繁琐的工作,而且还允许你在没有建立再利用代码的情况下查询和操作文档数据。当然,对于重复性的任务,它并不能带来好处,但是在专门的基础上理解文档并处理其内容方面,它确实是一种非常好的方式(尽管我试图理解一个XSH脚本的组合是否会允许它自己在这样的用途中发挥作用,但是今天要说的技巧并不是……

我们一直都在努力坚持原创.......请不要一声不吭,就悄悄拿走。

我原创,你原创,我们的内容世界才会更加精彩!

【所有原创内容版权均属TechTarget,欢迎大家转发分享。但未经授权,严禁任何媒体(平面媒体、网络媒体、自媒体等)以及微信公众号复制、转载、摘编或以其他方式进行使用。】

微信公众号

TechTarget微信公众号二维码

TechTarget

官方微博

TechTarget中国官方微博二维码

TechTarget中国

XSH是一个命令行的XML外壳程序,使得开发者没有必要再做这种细小繁琐的工作,而且还允许你在没有建立再利用代码的情况下查询和操作文档数据。

  当需要浏览树型文档结构并从其枝叶上采摘数据的时候,许多XML开发者使用XSLT引擎或其他工具来完成这个任务。XSH是一个命令行的XML外壳程序,使得开发者没有必要再做这种细小繁琐的工作,而且还允许你在没有建立再利用代码的情况下查询和操作文档数据。当然,对于重复性的任务,它并不能带来好处,但是在专门的基础上理解文档并处理其内容方面,它确实是一种非常好的方式(尽管我试图理解一个XSH脚本的组合是否会允许它自己在这样的用途中发挥作用,但是今天要说的技巧并不是这个……)。

  所有的外壳程序都必须是来自某个地方的,所以开放资源XSH也不例外。XSH是在Perl中开发出来的,它的语法和Perl非常相似(这对于那些已经熟悉该语言的人有很大好处,对于不熟悉的人也没有很大的负担)。XSH支持Perl代码,甚至允许像访问正常的Perl变量一样访问XML数据结构。XSH也支持XPath,并且能够处理使用XPath语法格式的查询。

  感兴趣的读者和工匠们(tinkers)可以从SourceForge的XSH下载页面来下载XSH。你需要获得像下面提到的多种文件的集合:

  对于使用Linux、BSD变量、MacOS X和其他Unix类型的用户来说:

  XML-XSH2-2.0.2.tar.gz(或者该文件的更高版本;如果可用,这是XSH的最新版本。)
  Xmltools-bundle.tar.gz:这是XSH用来处理其运行时间可靠性的库和模块的集合。

  要在这种环境类型下安装XSH,首先要解压缩XML工具包,然后运行含有编译和安装XSH组件的安装脚本(当你使用“cd”命令把目录修改到xmltools-bundle/ directory中后,键入./install -prefix=/usr/local;你可能需要改变-prefix的设定,以便能够匹配你的本地运行时间环境)。

  对于使用Windows的用户:

  从ActiveState处获取ActivePerl的副本。
  获取xsh2-2.0.2-windows-apnnn.zip文件,那里有三个数字,561是指ActivePerl 5.61,而580是指ActivePerl 5.8。其中包括了专为ActiveState’s Perl Package Manger的XSH软件包(与ActivePerl一起装载)。
  获取xmltools-bundle-apnnn.zip文件,跟上面一样,那里有三个数字分别是561或580,它们用来匹配你正在使用的Perl版本。

  在Windows环境下安装XSH,首先要安装ActivePerl,然后把下载的文件解压缩到你所选择的目录中。在这个目录中,在命令行(开始、运行、在“打开:”后面的文本框内键入Command、键入ppm.bat,然后点击OK键)状态下执行ppm.bat软件包管理器文件。当PPM外壳程序启动后,如果你正在运行ActivePerl 5.6.1键入set rep localdir .;如果你正在运行的是ActivePerl 5.8,就要键入rep add localdir .。然后在PPM外壳程序中键入install XML::XSH来安装这个软件包(你必须首先下载它们)。

  在命令行状态下,你可以尝试用不同的命令来使用XSH。要确认你的文件是在工作目录中,然后把本地环境设置到这个目录中,以便可以使用它们来开始工作。“xsh”命令打开的外壳程序。“$a:- open "myname.xml"”命令打开名为myname.xml的本地文件。“ls $a”命令列出myname.xml文件中的内容。你可以使用“Is”命令来访问出现在该文件中XML文档结构。如果文件内容看起来跟下面的很相似(无导言和标题的数据):

  
  
  
  This is data
  
  

  
  
  This is data 2
  

  

  那么键入ls //root[branch/label="This is label 1"]将会产生下面的输出结果:

  
  
  
  This is data
  
  

  

  一些人将会把这看作是对所有分支元素的XPath查询,这些元素的标签内容匹配了字串“This is label 1”。只要键入“ls //root/branch”,就会在myname.xml文件中显示所有的分支元素。额外的XPath详情在其官方详情说明书中叙述,同时在为那些不熟悉这一优秀工具的人而准备的Zvon向导中也有说明。

  基本的XSH命令对应于Perl和一般Unix外壳程序,所以“cd”改变了上下文节点(在其他执行工具中有的时候叫做指针)的位置。“ls”列出文件的内容(基于当前文档位置或节点的规格),“pwd”显示当前上下文节点位置。操作命令包括以下这些:

  copy:从来源处把一个或更多的节点复制到目标位置(XPath的两方面)。在目标位置参数表列中的同样位置形成一个来源节点的单一副本。
  insert:插入一个指定类型的新节点。节点的类型可以是元素、属性、文本、c数据、注释、组块或者是实体参照。
  map:在节点表列上绘制表达式或者简短的操作。
  move:把节点从一个位置移动到另一个位置。与前面论述过的一样,首先是复制,然后删除。
  remove:删除一个或更多的节点。
  rename:重命名一个节点。
  xcopy:从来源处把节点交叉复制到目标位置。把每一个来源节点复制到每一个目标节点处,所以每一个目标节点都有一个被复制的来源节点的副本。
  xinsert:在目标节点处交叉插入一个或更多的节点。它的工作过程与xcopy很相似;把每一个指定来源节点的副本插入到每一个目标节点处。
  xmove: xcopy之后进行删除。

  在前面叙述的命令中,对于目标节点,copy、nsert、xcopy、xinsert和xmove采用了位置参数来指定来源节点是如何被处理。下面给出的一些位置参数的合法值:

  after:在目标节点之后放置来源节点。“Most”指情况是明确的,但是当来源节点和目标节点都是属性的时候,XSH会把来源节点依附到目标属性的父节点元素中。如果来源节点不是属性,而目标节点是属性,那么来源节点属性的文本将被添加到目标节点属性值中。

  append:把来源节点添加到目标节点中。如果目标节点是元素或文档某个类型,那么来源节点将作为目标节点的子节点被添加。否则,XSH将把来源节点的文本性内容添加到目标节点的内容中。
  before:把来源节点放置于目标节点之前。它定位于前面的位置,而不是在后面,除此之外,它的工作过程与“after”非常相似。
  into:把来源节点放置于目标节点之中。如果来源节点是某种类型的元素,那么来源节点将会成为元素的子节点(除非来源节点是某种类型的属性,那么来源节点将成为目标节点的一个属性)。否则,目标节点的值将被设置到来源节点的值中。
  prepand:把来源节点添加到目标节点之前。它定位于目标节点之前而不是之后,除此之外,它的工作过程与append非常相似。对于子节点,prepend在第一个子节点处开始,并向前添加所有的子节点。
  replace:除了当目标节点是一个属性的时候之外,用来源节点替换整个目标节点。然后,只有目标节点的文本内容被来源节点的文本内容替换。

  节点的类型已经被列出(并且对于多数已经熟悉一个或更多XML标记语言的人是不陌生的),但是在这里还是简单地把它们定义出来:

  元素(element):元素标识(例如:... ... or )。
  属性(attribute):与一个元素相联系的属性(例如:filename="myfile.xml")。
  文本(text):文本内容(出现在元素标签对之间)。
  C数据(cdate):一个包含了二进制数据或其他内容的C数据区段不会(在SGML中)被解析为文本。
  注释(comment):一个XML注释(开始于)。
  组块(chunk):指文本格式中任何符合规格的有效XML片段或部分。
  实体参照(entity_reference):指任何实体参照(通常用来表示元数据,就像&表示and一样)。

  那些愿意花费一些时间来使用XSH的人,将会发现他们的努力得到成倍的回报。这是因为XSH根植于Unix,那些在相关环境下使用XSH工作的人将会发现,与Windows环境相比,这个工具对他们既熟悉又有用。但是在任何一个原点,将会发现在很多XML开发者的工具箱中都有完全应当的工作。浏览XSH的(关于)页面获得更多信息,要特别留意(特色)、 (用法)和(例子)链接。

作者

Ed Tittel
Ed Tittel

IT老兵,从事开发、网络咨询、技术培训等逾30年。

相关推荐

  • BEST:SOAP/XML和REST的替代方案

    虽然拥有大量的机架服务器,以及大量软件开发人员的组织,基于web和集成服务的SOAP和REST很适合他们,但也会出现问题。

  • Spring 烂!差!

    有些人可能对Spring的第一印象不太好,它真的很烂,很差吗,也许这只是你的一种偏见,它也有是自己的优点的。

  • 基于SOA架构的业务安全性研究

    SOA在提供价值链上企业之间信息共享和业务流程自动化的同时,也给业务信息安全带来了负面影响,且存在安全隐患,这些你知道吗?

  • Java读取配置文件的几种方法

    在现实工作中,我们常常需要保存一些系统配置信息,大家一般都会选择配置文件来完成,那么在Java怎样读取配置文件呢?