如何将xml传递给变量而不是文件中的xmllint?

问题描述:

我想这样做如何将xml传递给变量而不是文件中的xmllint?

xmllint --xpath "//filestodelete[filename = somename]/text()" #filestodelete# 

和filestodelete是XML类型

的BPEL变量,但它不工作

如何做到这一点>?

+0

你有你的XML文档中的shell变量? – 2014-12-11 03:26:31

+1

我在回答中假定BPEL变量作为shell变量公开。如果这不是真的,那么您有一个BPEL问题,而不仅仅是一个shell问题,它需要适当标记。 – 2014-12-11 03:46:41

+0

是的,我正在使用允许在shell中使用BPEL变量的框架....这意味着filestodelete变量是xml类型的BPEL变量。但它不是系统中的文件。 – sakal 2014-12-11 13:28:04

假设你已经把你的查询文本在名为query shell变量(让我的例子更简洁) -

使用bash,你可以使用一个herestring:

xmllint --xpath "$query" - <<<"$filestodelete" 

符合POSIX SH ,你需要使用定界符:

xmllint --xpath "$query" - <<EOF 
$filestodelete 
EOF 

顺便说一句 - 因为xmllint支持--xpath不是所有的版本中,你必须是跨版本兼容tter如果使用XMLStarlet代替,这支持从初始创建如下:

xmlstarlet sel -t -m "$query" -v . <<<"$filestodelete" 
+0

所以这个工作与xml存储在一个变量而不是物理上在本地unix系统? – sakal 2014-12-11 16:10:37

+0

'$ filestodelete'预计是你的变量,这里的XML不是文件名 - 也就是说,当然是。 – 2014-12-11 16:50:59

+0

也许我把它写错了,filestodelete是一个xsd类型的文件,它它是一个工作流变量,而不是驱动器上的物理文件。 – sakal 2014-12-25 14:53:21