问题描述 投票:0回答:1
-:157.22: Namespace prefix xlink for href on use is not defined <use xlink:href="#menu"/>

由于包含use xlink:href

标签的新嵌入式SVG图像。

prefixxlink

的相应名称空间应该为“
http://www.w3.org/1999/xlink
”,我在第一步中将其添加到命令段

(...) | xml.exe sel -N n="http://www.w3.org/1999/xlink" -t -v "/html/body/div/div/div/main/ul/li[1]/h2/a/@href"
但显然我没有做对,因为错误仍然存在。我在生成的网站内容中没有看到任何名称空间声明。 我如何解决错误? update

我正在处理的完整命令:

wget -qO- "https://notepad-plus-plus.org/downloads/" | xml fo -H -Q | xml.exe sel -t -v "/html/body/div/div/div/main/ul/li[1]/h2/a/@href"

我也会收到以下错误消息:

Attempt to load network entity http://www.w3.org/TR/REC-html40/loose.dtd -:3.1: Start tag expected, '<' not found 我假设还有另一个命名空间冲突。

xmlstarlet的错误消息

  

-:157.22:使用使用HREF的名称空间前缀Xlink未定义



将其转到HTML文件,而不是您的XPATH表达式。 HTML文件似乎无效。浏览器通常会忽略它,但是对于XMlstarlet来说,这似乎是一个问题。

解决此问题的一种方法是在
html batch-file command-line xml-parsing xmlstarlet
1个回答
0
投票
元素的超元素上添加名称空间声明。我选择了

<body>

元素以简单:

<body xmlns:xlink="http://www.w3.org/1999/xlink">
然后您甚至不需要XMLSTARLET命令中的名称空间声明,因为您没有使用XPath Expression中的名称空间中的任何元素。

但是如何纠正HTML是另一回事。 快速而肮脏的人会使用“ sed” - 通常是一个坏主意,被认为是不好的做法,但是在这种简单的情况下,这可能就足够了。
您可以插入

sed -e 's/<body>/<body xmlns:xlink="http:\/\/www.w3.org\/1999\/xlink">/g'

在WGET和XML FO之间的命令。
    
将文件汇编

sed -r -e 's_<(/?)\w+:_<\1_g' -e 's_\sxmlns:[^[:blank:]>]+__g'

这将摆脱所有命名空间标签和参考标签


最新问题
© www.soinside.com 2019 - 2025. All rights reserved.