我知道我的问题包括 2 个问题...
起初,我想使用 xmllint 来输出“loc”内容标签。我加载的站点地图有一个 xmlns="..."。
在 xmllint shell 上,我需要这样做:
setrootns
xpath //defaultns:loc
那行得通……没问题。但我需要在 bash 脚本中执行此操作。
(AFAIK)xmllint 没有选项告诉“我们走吧,setrootns”,所以我不能这样做:
xmllint --xpath "//loc" sitemaps.xml
# or
xmllint --xpath "//defaultns:loc" sitemaps.xml
这是第一个问题,我如何告诉 xmllint 加载默认的 ns ?
如果我不能,让我们看看我的第二个解决方案:
我可以删除 xmlns 属性,然后,没有 ns 可以使用:
xmllint --xpath "//loc" <(sed -r 's/xmlns=".*?"//' sitemaps.xml)
但是......现在......我的 500 个“loc”内容的整个响应被串联在一行中!......
我也试过这个:
xmllint --shell sitemaps.xml <<EOF
setrootns
xpath //defaultns:loc/text()
EOF
或者再次
xmllint --shell sitemaps.xml <<EOF
setrootns
cat //defaultns:loc
EOF
第一个给我(例如)
465 TEXT
content=http://...
带有截断的网址
第二个每两行给我一个“------”......最后一行给我一个“/>”......
我开始非常紧张...... :)
如果您找到任何解决方案,非常感谢。
目标是拥有每个位置,每行一个。