草庐IT

XmlStarlet

全部标签

xml - 根据树中另一个元素的值更改 XML 元素的值

我有一个非常大(未压缩超过100兆字节)的XML文件存储数据集,我正在尝试有选择地更改一些值。例如,说sample.xml看起来像这样:Foo1020Bar1540现在我想改变的值到18,但仅对于Name的对象元素有值Foo.我一直在研究XMLStarlet文档,但它的articleonediting只有关于如何直接在树中查找元素属性的示例,除非我遗漏了什么... 最佳答案 ...显然我是个白痴;如thisanswer中所示您可以像搜索属性值一样搜索元素值,因此正确的命令是:xmlstarleted-u'//object[name=

大文件上的 xmlstarlet sel

命令$xmlstarletsel-t-c"/collection/record"file.xml似乎在应用给定的Xpath表达式之前将整个文件加载到内存中。这不适用于大型XML文件。xmlstarlet是否提供流模式以从大型(100G+)XML文件中提取子元素? 最佳答案 因为对于大型XML文件我只需要一小部分XPath,所以我实际上自己实现了一个小工具:xmlcutty.我的问题的例子可以这样写:$xmlcutty-path/collection/recordfile.xml 关于大文

xml - 如何使用 xmlstarlet 更新 xml 文件

我正在使用xmlstarlet的windows版本通过windows批处理文件更新xml文件。xmledit--update"/xml/table/rec[@id=3]/@id"--value10%xmlfile%我希望这会将rec节点的id属性更新为10。当我运行它时,我会在命令行中看到更新后的xml,但文件永远不会更新。我该怎么做,我想避免重写整个文件,因为文件可能很大。更新前:更新后: 最佳答案 您没有显示您的输入文档,但我认为它是以下内容,取自xmlstarletdocumentation:123StringValue346

xml - 如何在 xmlstarlet 中声明 XPath 命名空间?

我是xmlstarlet的新手,所以希望这个答案很简单。我正在编写一个脚本来从命令行修改InkscapeSVG文件。我选择了工具xmlstarlet。在测试文件上测试命令语法后,我在实际SVG文件上遇到了问题。我认为命名空间的使用让我失望。示例文件:我想将Gradient6204更改为Gradient9999。我写了这个命令,它不起作用(只返回原始文件)。xmlstarleted-u"/svg/defs/linearGradient[@id='linearGradient6204']/@id"-v'linearGradient9999'text.txt我也再次尝试,使用-N添加命名空间

xml - 用于编辑 xml 文件的 bash 脚本

我想编辑一个XML程序的配置文件:.../home/username/...从bash脚本执行此操作的最简单方法是什么?谢谢 最佳答案 使用xmlstarlet:xmlstarletval-efile.xmlxmlstarleted-u"//settings/setting/@name"-v'localdirectory2'file.xmlxmlstarleted-u"//settings[1]/setting/@name"-v'localdirectory2'file.xml#editfileinplacexmlstarleted

xml - 如何? xmlstarlet 通过 id 提取 HTML 数据

我有一个简单的任务让我拔头发,我确信我已经很接近了。这是我的xhtml文件:TestPagetesttesttestmotest...xmlstarlet喜欢它:$xmlstarlet.exeel-vtest.xhtmlhtml[@xmlns='http://www.w3.org/1999/xhtml']html/headhtml/head/titlehtml/bodyhtml/body/phtml/body/table[@id='test_table']html/body/table/trhtml/body/table/tr/tdhtml/body/table/tr/tdhtml/b

xml - 使用 xmlstarlet 提取和转储元素

我正在寻找一种使用xmlstarlet从我的xml中提取和打印元素的方法;例如如果我的xml是HarryPotter29.99LearningXML39.95我想打印出price=29.99的book元素:HarryPotter29.99我理解选择这样一个元素的xpath查询(/bookstore/book[price=29.99])但是我无法在标准输出上打印/转储它。如果我使用'-v'选项并使用-v(.)我没有得到我想要的输出(其中包含所有标签)我只得到文本值。应该有一种方法可以简单地按原样转储所选元素,而这正是我正在寻找的。感谢期待。 最佳答案

xmlstarlet 选择值

这是xml数据:我正在尝试查找identifyer值为1234的项目的property2。我可以选择数据:$xmlstarletsel-t-c"/DATA/TABLES/ITEM/identifyer[@V=1234]"test.xml两种类型的输出是可取的:$xmlstarlet并且:$xmlstarletqwerty 最佳答案 关键是从ITEM节点开始,而不是标识符:$xmlstarletsel-t-c"/DATA/TABLES/ITEM[identifyer/@V=1234]"test.xml然后你可以挑选出你想要的位:$xm

xml - 如何使用 xml starlet 选择 xml 值

如何使用xmlstarlet检索值?我正在尝试从以下xml文件中检索初始值4.7:......我尝试了以下方法,但没有用:%cd%\resources\XML.EXEsel-t-c"/GCContextualMethod/method[@xmlns=""]/GC[@PostRunHoldTime="0"]/Column[2]/Setpoints[@Mode="CONSTANT_FLOW"]/Flow[@State="ON"]@InitialValue"%cd%\GC78901.RapidControl.MethodXML.xml 最佳答案

xmlstarlet - 删除换行符

我有以下文件log.xml:Line1Line2andsoon在使用xmlstarlet1.0.1的CentOS5.4上,如果我运行以下命令,同时删除message中的换行符:xmlsel-t-m//entry-v"translate(message,' ','@')"log.xml结果是:Line1@Line2andsoon在CentOS6上使用xmlstarlet:1.3.1compiledagainstlibxml22.7.6,linkedwith20706compiledagainstlibxslt1.1.26,linkedwith10126我会收到:Line1Line