当前位置:  开发笔记 > 编程语言 > 正文

XML命令行处理的Grep和Sed等效项

如何解决《XML命令行处理的Grep和Sed等效项》经验,为你挑选了8个好方法。

在进行shell脚本编写时,通常数据将存储在单行记录的文件中,如csv.用grep和处理这些数据真的很简单sed.但我经常需要处理XML,所以我真的想通过命令行来编写对XML数据的访问权限.什么是最好的工具?



1> 小智..:

我发现xmlstarlet非常擅长这种事情.

http://xmlstar.sourceforge.net/

应该也可以在大多数发行版存储库中使用.这里有一个介绍性的教程:

http://www.ibm.com/developerworks/library/x-starlet.html



2> Joseph Holst..:

一些有前景的工具

nokogiri:使用XPath和CSS选择器解析ruby中的HTML/XML DOM

hpricot:已弃用

fxgrep:使用自己的XPath语法来查询文档.用SML编写,因此安装可能很困难.

LT XML:从SGML工具,包括衍生XML工具箱sggrep,sgsort, xmlnorm和其他人.使用自己的查询语法.文件 非常正式.用C. LT XML 2声明支持XPath,XInclude和其他W3C标准.

xmlgrep2:使用XPath进行简单而强大的搜索.使用XML :: LibXML和libxml2在Perl中编写.

XQSharp:支持XQuery,XPath的扩展.为.NET Framework编写.

xml-coreutils:Laird Breyer的工具包相当于GNU coreutils.在一篇有趣的文章中讨论了理想工具包应包含的内容.

xmldiff:用于比较两个xml文件的简单工具.

xmltk:在debian,ubuntu,fedora或macports中似乎没有包,自2007年以来没有发布过,并且使用非可移植的构建自动化.

xml-coreutils似乎是最好的文档和大多数面向UNIX的.



3> bortzmeyer..:

对于Joseph Holsten的优秀列表,我添加了Perl库XML :: XPath附带的xpath命令行脚本.从XML文件中提取信息的好方法:

 xpath -q -e '/entry[@xml:lang="fr"]' *xml


这默认安装在osx中​​,但没有`-q -e`选项.例如,从"AndroidManifest.xml"中的"manifest"节点获取属性"package"值:`xpath AndroidManifest.xml'字符串(/ manifest/@ package)'2>/dev/null`

4> Vi...:

还有xml22xml对.它将允许通常的字符串编辑工具来处理XML.

例.q.xml:



    text
    more text
    ddddsss
     sdfsdfdsf  ]]>

xml2 < q.xml

/foo=
/foo=   text
/foo=   more text
/foo=   
/foo/textnode=ddd
/foo/textnode
/foo/textnode/@a=bv
/foo/textnode=dsss
/foo=
/foo=    asfdasdsa  sdfsdfdsf  
/foo=

xml2 < q.xml | grep textnode | sed 's!/foo!/bar/baz!' | 2xml

ddddsss

PS还有html2/ 2html.


+1我不能赞成这个......"cat foo.xml | xml2 | grep/bar | 2xml` - 为您提供与原始结构相同的结构,但除"bar"元素外,所有元素都已被剥离.真棒.

5> Dave Jarvis..:

你可以使用xmllint:

xmllint --xpath //title books.xml

应与大多数发行版捆绑在一起,并与Cygwin捆绑在一起.

$ xmllint --version
xmllint: using libxml version 20900

看到:

$ xmllint
Usage : xmllint [options] XMLfiles ...
        Parse the XML files and output the result of the parsing
        --version : display the version of the XML library used
        --debug : dump a debug tree of the in-memory document
        ...
        --schematron schema : do validation against a schematron
        --sax1: use the old SAX1 interfaces for processing
        --sax: do not build a tree but work just at the SAX level
        --oldxml10: use XML-1.0 parsing rules before the 5th edition
        --xpath expr: evaluate the XPath expression, inply --noout


`xmllint`没有`--xpath`参数:http://www.manpagez.com/man/1/xmllint/
@MiserableVariable`-- xpath`是一个相当新的添加,例如不在RHEL 6版本的`xmllint`中.
更准确地说,libxml2 2.7.7(2010年)中引入了xmllint --xpath。

6> Clay..:

如果您正在寻找Windows上的解决方案,Powershell具有读写XML的内置功能.

的test.xml:


  I like applesauce
  You sure bet I do!

Powershell脚本:

# load XML file into local variable and cast as XML type.
$doc = [xml](Get-Content ./test.xml)

$doc.root.one                                   #echoes "I like applesauce"
$doc.root.one = "Who doesn't like applesauce?"  #replace inner text of  node

# create new node...
$newNode = $doc.CreateElement("three")
$newNode.set_InnerText("And don't you forget it!")

# ...and position it in the hierarchy
$doc.root.AppendChild($newNode)

# write results to disk
$doc.save("./testNew.xml")

testNew.xml:


  Who likes applesauce?
  You sure bet I do!
  And don't you forget it!

资料来源:https://serverfault.com/questions/26976/update-xml-from-the-command-line-windows



7> 小智..:

还有NetBSD xmltools的xmlsed和xmlgrep!

http://blog.huoc.org/xmltools-not-dead.html



8> Adrian Mouat..:

取决于你想要做什么.

XSLT可能是要走的路,但是有一个学习曲线.尝试xsltproc并注意您可以提交参数.

推荐阅读
惬听风吟jyy_802
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有