我有xml文件:
<?xml version="1.0" encoding="UTF-8"?>
<metadata>
<groupId>group</groupId>
<artifactId>project100</artifactId>
<versioning>
<latest>1.2.1-black</latest>
<release>1.2.1-black</release>
<versions>
<version>1.0.0</version>
<version>1.0.0-black</version>
<version>1.0.2</version>
<version>1.0.1</version>
<version>1.2.0</version>
<version>1.2.1-black</version>
</versions>
</versionsing>
</metadata>
我还有一个变量,如:$ ID = 1.0.2,我想检查我的xml文件中是否存在此ID。 我尝试这样的事情:
'cat ///metadata/versioning/version/text()' | xmllint --shell $content | grep -v "^/ >"
其中$ contenet是我的xml文件,但是这显示了像这样的mi:
warning: failed to load external entity "<version>1.0.0</version>
来自xml文件的每个实体。我不知道该怎么做。我在bash脚本编写方面有点无聊
答案 0 :(得分:1)
我认为$content
包含文件的内容,而您使用的工具则需要传递文件的名称。它将XML的每个“单词”(如<version>1.0.0</version>
)视为文件的路径而无法找到,所以抱怨。
我还注意到你正在使用--shell
,然后必须使用grep来删除提示。您可以直接使用--xpath
来避免这种情况。
我建议尝试这样的事情:
echo "$content" | xmllint --xpath '//metadata/versioning/versions/version/text()' -
或者如果你有要处理的文件的名称,那么就这样做:
xmllint --xpath '//metadata/versioning/versions/version/text()' file.xml
我认为versionsing
是一个拼写错误,因此我在XPath中将其更改为versioning
。我还添加了缺失的部分versions/
(感谢choroba)。
鉴于您尝试过滤到特定版本,我猜你想要这样的东西:
$ id=1.0.0
$ xmllint --xpath "//metadata/versionsing/versions/version[text() = '$id']/text()" file.xml
1.0.0
要确定某个特定版本是否存在,您可以这样做:
id=1.2.3
xpath="//metadata/versionsing/versions/version[text() = '$id']"
if xmllint --xpath "$xpath" file.xml 2>/dev/null
then
echo "version $id found"
else
echo "version $id not found"
fi
答案 1 :(得分:0)
这将告诉您XML文件中是否存在ID值:
Object
修改强> 不包括部分匹配:
public Cartao parseJSON(String jsonParam){
Cartao jsonCartao = new Cartao();
try {
JSONObject json = (JSONObject) new JSONTokener(jsonParam).nextValue();
jsonCartao = new Cartao(
json.getString("NomeCartao"),
json.getDouble("SaldoRestante"),
json.getString("NomePessoa"),
json.getDouble("ValorUltimoCredito"),
json.getString("DataUltimoCredito"),
json.getBoolean("Status"));
} catch (Exception e) {
e.printStackTrace();
}
return jsonCartao;
}