问题标签 [xmlstarlet]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
520 浏览

xml - 如何使用带条件的 XmlStarlet?

源 XML

我想使用 XmlStarlet 使用 Linux shell 脚本将每个<element name="bar">true</element>的值更新为<element name="foo">相同的值。<block>是否可以使用单个xml ed命令?

预期结果

0 投票
1 回答
8166 浏览

xml - 如何使用 XmlStarlet 将具有属性的元素插入 XML 文件?

源 XML

目的

我想使用 Linux shell 脚本<el name="c">0</el>在其中插入一个元素:<block>

我可以使用 XmlStarlet 附加元素:

问题

  1. 选择每个<el>没有name属性的元素的 XPath 表达式是什么?
  2. 我可以使用单个 xml ed命令附加元素并插入属性吗?
0 投票
2 回答
256 浏览

xml - 如何使用和处理重复的 XML 元素以使用 shell 脚本创建其他元素?

假设我想使用(符合 POSIX 的)shell 脚本创建下一个 XML 文件:

但我只有下一个:

使用 XMLStarlet edit --update(并且仅使用--update),我可以使用 XPath 表达式而不是表单中的字符串值:

但 XPath 2.0 字符串函数似乎不起作用(xmlXPathCompOpEval: function lower-case not found)。然后我如何遍历所有块并使用元素的文本值<title>来生成<slug>元素?我怎样才能用最少的xml动作做到这一点?

0 投票
1 回答
132 浏览

xml - Is there any way to get (a lot of) values from a file to filter a big xml using xmlstarlet?

everyone. I'm trying to filter a big xml file (from a BLAST) to keep only some <Interaction> nodes defined by a list of <Iteration_iter-num> values that I define from a file. Here is a simplified example (the real Blast.xml have more than 80000 Iterations):

and I have a file with the iterations to keep (saved as keep_iter):

For this kind of low scale problem I managed to do the filtering with xmlstarlet, creating first a version of the file to store the string for the comparison (saved as filter):

This works as a charm with:

Basically, I removed all the Iteration nodes that were not in the filter file Obtaining:

The problem is that I really have a keep_iter file with 20000 values to filter. When I create the filter file and run the xmlstarlet command above, the argument is obviously too long.

Any suggestion to filter such a Blast.xml file to keep only those Iteration nodes which iteration number is listed in the keep_iter file (with 20k values)? I want to keep the original xml structure.

0 投票
1 回答
238 浏览

xml - XMLStarlet 不编辑任何内容

我有以下 XML:

我正在以下列方式使用 xmlstarlet 编辑 serverPropertyFile 的属性值:

我错过了什么?

找到了答案:我使用的 xpath 不正确是:

0 投票
2 回答
2467 浏览

xpath - 如何从网页复制特定元素

我的目标是从网页中获取特定的文本区域。想象一下,如果您能够在页面上的任何位置绘制一个矩形,并且该矩形中的所有内容都将被复制到您的剪贴板中。我正在使用 FireBug(请随意提出其他解决方案,我已经搜索了插件或书签,但没有找到任何有用的东西),它的控制台窗口和 XPath 用于此目的。我想要获取的值采用以下格式(这是从 FireBug“HTML 检查”中观察到的):

<span class="number3_0" title="Numbers">3.00</span>

所以我最终得到以下代码,我从 FireBug 控制台发出: $x("//span[@title='Numbers']/text()")

在此之后我得到这样的东西:

[<TextNode textContent="2.00">, <TextNode textContent="2.00">, <TextNode textContent="2.00">, <TextNode textContent="2.00">, <TextNode textContent="3.00">]

在此之后,我单击(用鼠标右键)[并选择,Inspect in DOM panel然后按ctrl+a以下格式复制/粘贴数据:

正如您可以假设的值textContent是我感兴趣的信息。我尝试修改原始 XPath 查询以仅返回这些数字但没有运气。我曾是:

string()按照此处的建议将整个查询包装到Xpath - 仅获取节点内容而不获取其他元素

试图弄清楚这个是如何工作的,通过 XPath 等方法在节点之间提取文本

为了能够获得所需的值,我使用了一些 bash-scripting + xml-formatting,在完成这个乏味/容易出错的任务之后,我得到了以下格式:

现在我用xmlstarlet以下方式获取这些值(是的,我知道我可以在上一步中使用正则表达式并拥有我需要的所有数据。但我对 DOM/XPath 解析很感兴趣,并试图弄清楚它是如何工作的):

这最终给了我想要的输出:

我的问题有点笼统:

  1. 这个可怕的漫长过程如何自动化?
  2. 如何修改 FireBug 中使用的原始 XPath 字符串 $x("//span[@title='Numbers']/text()")以立即仅获取数字并节省自己的其余步骤?
  3. 我还不是很熟悉xmlstarlet,尤其是选择(sel)模式让我抓狂。我见过以下选项的各种组合:

    -c 或 --copy-of - 打印 XPATH 表达式的副本

    -v 或 --value-of - 打印 XPATH 表达式的值

    -o 或 --output - 输出字符串文字

    -m 或 --match - 匹配 XPATH 表达式

有人可以解释一下什么时候使用哪个吗?如果可能的话,很高兴看到具体的例子。如果感兴趣,有提到的选项的各种组合,我不太了解: http ://www.grahl.ch/blog/minutiae-return-content-element-xmlstarlet 使用 xmlstarlet 提取和转储元素 测试 XML属性

4.)关于最后一个问题xmlstarlet是一个装饰性的语法糖,如何获得漂亮的换行符分隔输出,正如你所看到的,我通过添加换行符作为分隔符“作弊”,但是当我尝试使用这样的转义字符时:

cat input | xmlstarlet sel -t -m "//TextNode" -v 'concat(@textContent,"\n")'

它没有用,我从中学到很多东西的原始参考也以这种“丑陋”的方式使用它http://www.ibm.com/developerworks/library/x-starlet/index.html

PS:也许这些所有步骤都可以使用 curl + xmlstarlet 来简化,但是对于需要登录或其他类似内容的页面也可以使用 FireBug 选项。

感谢所有的想法。

0 投票
2 回答
4305 浏览

bash - bash - xmlstarlet -v 到 $variable

该行打印出我拥有的 rss 提要中条目的标题(-v“标题)和 url(-v“链接”)。我想将标题和 url 存储到单独的变量中(例如,$title 和 $url ) 所以我以后可以用它们来卷曲。

我怎样才能做到这一点?

0 投票
2 回答
751 浏览

xml - xmlstarlet 不为某个元素返回任何值

以下情况正在发生:

按预期工作的文件:

列出 xml 中的内容:

选择特定元素:

原始数据:

下一次运行 test.xml

查询方式同上一个:

文件内容:

为什么我不能显示那些文件标签的内容?我需要以某种方式逃避它吗?

0 投票
1 回答
1565 浏览

xml - 使用 xmlstarlet 将子节点插入到具有给定值的子节点

我使用 xmlstarlet 并尝试在给定节点下的子节点处插入。但是如何在具有给定值而不是属性的节点下执行此操作?

尝试使用此命令但插入到许多地方并且只会在 CCDefines 之后执行

而不是xml中我有/project/configuration/settings/data/option/name的任何地方

我的xml文件是:

希望有人有这方面的经验。

0 投票
2 回答
6052 浏览

xml - 使用 xmlstarlet 连接多个 xml 元素

我正在尝试编写一个 bash 脚本以从诸如此类的 xml 文件中提取多个“导演”,并将它们用管道分隔,即 Tom Tykwer|Andy Wachowski。

相关的xml部分是:

在 bash 脚本中使用 xmlstarlet 执行以下命令:

给我吗

这个命令直接在终端

给我:

当我没有指定 -n 选项时,我不知道为什么要添加新行。

我的一些搜索建议是这样的:

但这只是给了我:

我会很感激我能得到的任何帮助。我在 Debian Wheezy 上使用 xmlstarlet 1.3.1 和在 Xubuntu 13.10 上使用 xmlstarlet 1.5.0 看到了这种行为。