我正在通过Bash脚本使用XMLstarlet来搜索在Git中所做的更改,并创建一个仅包含已更改节点的新XML文件。
工作正常,但我无法匹配包含实体"
的字符串。
XML如下所示:
<?xml version="1.0" encoding="UTF-8"?>
<CustomLabels xmlns="http://soap.sforce.com/2006/04/metadata">
<labels>
<fullName>Your_Previously_Selected_Rates_Not_Applicable</fullName>
<categories>Error</categories>
<language>en_US</language>
<protected>false</protected>
<shortDescription>Your Previously Selected Rates Not Applicable</shortDescription>
<value>The rate previously selected isn't eligible. Please click on "Select" to select a new one.</value>
</labels>
</CustomLabels>
以前,我们在'
方面遇到问题,但通过在脚本中替换为'
来解决此问题。试图用"
做同样的事情,而用"
代替,但这弄乱了bash中的命令。
我们正在运行的命令是:
xmlstarlet sel -N x="http://soap.sforce.com/2006/04/metadata" -t -c "//x:labels[x:value/text()=\"The rate previsouly selected isn't eligible. Please click on "Select" to select a new one.\"]/x:fullName" -n CustomLabels.labels
任何线索,我可能需要做什么才能找到此文本?
答案 0 :(得分:1)
这很混乱。
本质上,您必须注意两件事。
诀窍是使用引诱:
xmlstarlet sel -N x="http://soap.sforce.com/2006/04/metadata" \
-t -c "//x:labels[x:value/text()=concat('The rate previously selected isn',\"'\",'t eligible. Please click on \"Select\" to select a new one.')]/x:fullName"
规则是:
使用双引号定义您的XPath。这样,您仍可以对concat
函数使用双引号,而使用单引号。
... -t -c "//x:lab...x:fullName"
通过isn't
函数中的字符串条目(使用转义的双引号引起来)将concat
中的单引号转义。
...ted isn',\"'\",'t elig...
将concat
的所有其他条目都写在单引号中,并用bash转义任何双引号:
...,'t elig... on \"Select\" to ...