如何通过XPath提取HTML标签内的文本?附示例与现有尝试
提取XML属性文本并合并的解决方案
你的思路是对的——用XPath定位目标属性完全可行,但当前命令的输出会带上属性名和引号,不符合你想要的“Wednesday Feb 20”格式。下面分享几种实用的优化方案:
1. 直接用XPath的concat()函数拼接(推荐)
如果你的XPath工具支持XPath 1.0及以上(绝大多数主流工具都支持),可以一步到位用concat()把两个属性值合并:
xpath -q -e 'concat(//day[@d="1"]/@t, " ", //day[@d="1"]/@dt)' ~/day.txt
这个命令会直接输出你想要的合并后文本,不需要额外处理。
2. 用awk过滤并拼接现有输出
如果不想修改XPath查询,也可以用awk处理原始输出,去掉多余的符号再合并:
xpath -q -e '//day[@d="1"]/@t| //day[@d="1"]/@dt' ~/day.txt | awk -F'"' '{print $2}' | paste -d' ' - -
分步解释:
awk -F'"' '{print $2}':以双引号为分隔符,精准提取属性值部分paste -d' ' - -:把两行输出合并成一行,用空格分隔
3. 用sed处理输出格式
类似awk,用sed替换掉不需要的内容,再调整换行:
xpath -q -e '//day[@d="1"]/@t| //day[@d="1"]/@dt' ~/day.txt | sed 's/.*="\(.*\)"/\1/' | tr '\n' ' ' | sed 's/ $//'
分步解释:
sed 's/.*="\(.*\)"/\1/':通过正则匹配提取双引号内的属性文本tr '\n' ' ':把换行符替换成空格sed 's/ $//':去掉末尾多余的空格
4. 用xmllint替代xpath工具(如果系统自带)
如果你的系统装有xmllint,也可以用它来执行XPath查询,语法同样简洁:
xmllint --xpath 'concat(//day[@d="1"]/@t, " ", //day[@d="1"]/@dt)' ~/day.txt
总结一下:你的原始XPath查询已经正确定位到了目标属性,只需要调整输出处理方式或者修改XPath表达式,就能得到想要的结果啦。
内容的提问来源于stack exchange,提问作者Alfa Alfafa
相关产品推荐
相关产品推荐

