如果我只有xml文件中描述的标签(" answer_yes"或" answer_no"),有没有办法获得价值(是或否)。我想用bash来获取它们。
<string tag="answer_yes" value="Yes"/>
<string tag="answer_no" value="No"/>
答案 0 :(得分:3)
使用支持XML的工具。对于这个简单的查询,xmllint
就足够了:
answer=answer_yes
xmllint --xpath "//string[@tag='$answer']/@value" file.xml | cut -f2 -d\"
似乎不会扩展实体,因此,如果您的真实字符串包含引号,则必须将"
,&
和<
替换为{{1分别是{},"
和&
。
xsh为您处理实体:
<
答案 1 :(得分:2)
要在XML文档中使用value
或tag="answer_yes"
提取所有字符串的tag="answer_no"
元素,XMLStarlet是一个合适的工具:
xmlstarlet sel -t -m '//string[@tag="answer_yes" or @tag="answer_no"]' -v '@value' -n
这适用于天真的基于正则表达式的方法不会:它会识别注释和CDATA,并避免尝试解析它们;它会忽略不在answer_
或string
内的tag
内容;它会识别通过DTD引入的别名;它会在输出中正确地将&
更改为&
;它是否与元素中首先给出tag
或value
无关;它不关心将元素与其属性分隔的空格是tabs / spaces / newlines / etc;等等。
答案 2 :(得分:0)
在sed
中,如果您的Input_file与显示的示例相同,那么以下内容可能对您有帮助。
sed 's/.*answer_//;s/".*//' Input_file
答案 3 :(得分:0)
xml.parsers.expat.ExpatError: not well-formed (invalid token): line 3, column 29
随意扩展正则表达式以获得更准确的匹配。
来源: