如何使用 html link 提取文本?
How to extract text with html link?
我尝试使用 BaseX 解析 HTML 页面。
来自这部分代码:
<td colspan="2" rowspan="1" class="light comment2 last2">
<img class="textalign10" src="templates/comment10.png"
alt="*" width="10" height="10" border="0"/>
<a shape="rect" href="mypage.php?userid=26682">user</a>
: the text I'd like to keep [<a shape="rect"
href="http://alink" rel="nofollow">Link</a>] . with that part too.
</td>
我需要提取包含 a
HTML link、 和 的消息,删除第一个 :
个字符开始。
我想获得这个确切的文本:
<message>
the text I'd like to keep [<a shape="rect" href="http://alink" rel="nofollow">Link</a>] . with that part too.
</message>
使用此功能,
declare
function gkm:node_message_from_comment($comment as item()*) {
if ($comment) then
copy $c := $comment
modify (
delete node $c/img[1],
delete node $c/a[1],
delete node $c/@*,
rename node $c as 'message'
)
return $c
else ()
};
我可以提取文本,但我未能从开头删除 :
。
即:
<message>
: the text I'd like to keep [<a shape="rect" href="http://alink" rel="nofollow">Link</a>] . with that part too.
</message>
使用 XQuery 更新和转换语句对我来说似乎有点过于复杂。您还可以 select mypage.php
link 之后的节点;随着对输入的更多了解,可能还有更好的方法来 select 所需的节点。
要剪切 :
子字符串,请使用 substring-after
。模式 "cut off :
from the first result node, and return all others as is" 在使用转换语句时也适用,如果你坚持使用它们的话。
let $comment :=<td colspan="2" rowspan="1" class="light comment2 last2">
<img class="textalign10" src="templates/comment10.png" alt="*" width="10" height="10" border="0"/>
<a shape="rect" href="mypage.php?userid=26682">user</a>
: the text I'd like to keep [<a shape="rect" href="http://alink" rel="nofollow">Link</a>] . with that part too.
</td>
let $result := $comment/a[starts-with(@href, 'mypage.php')]/following-sibling::node()
return <message>{
$result[1]/substring-after(., ': '),
$result[position() > 1]
}</message>
由于 BaseX 支持 XQuery 3.0,您还可以利用辅助函数 head
和 tail
:
return <message>{
head($result)/substring-after(., ': '),
tail($result)
}</message>
我尝试使用 BaseX 解析 HTML 页面。 来自这部分代码:
<td colspan="2" rowspan="1" class="light comment2 last2">
<img class="textalign10" src="templates/comment10.png"
alt="*" width="10" height="10" border="0"/>
<a shape="rect" href="mypage.php?userid=26682">user</a>
: the text I'd like to keep [<a shape="rect"
href="http://alink" rel="nofollow">Link</a>] . with that part too.
</td>
我需要提取包含 a
HTML link、 和 的消息,删除第一个 :
个字符开始。
我想获得这个确切的文本:
<message>
the text I'd like to keep [<a shape="rect" href="http://alink" rel="nofollow">Link</a>] . with that part too.
</message>
使用此功能,
declare
function gkm:node_message_from_comment($comment as item()*) {
if ($comment) then
copy $c := $comment
modify (
delete node $c/img[1],
delete node $c/a[1],
delete node $c/@*,
rename node $c as 'message'
)
return $c
else ()
};
我可以提取文本,但我未能从开头删除 :
。
即:
<message>
: the text I'd like to keep [<a shape="rect" href="http://alink" rel="nofollow">Link</a>] . with that part too.
</message>
使用 XQuery 更新和转换语句对我来说似乎有点过于复杂。您还可以 select mypage.php
link 之后的节点;随着对输入的更多了解,可能还有更好的方法来 select 所需的节点。
要剪切 :
子字符串,请使用 substring-after
。模式 "cut off :
from the first result node, and return all others as is" 在使用转换语句时也适用,如果你坚持使用它们的话。
let $comment :=<td colspan="2" rowspan="1" class="light comment2 last2">
<img class="textalign10" src="templates/comment10.png" alt="*" width="10" height="10" border="0"/>
<a shape="rect" href="mypage.php?userid=26682">user</a>
: the text I'd like to keep [<a shape="rect" href="http://alink" rel="nofollow">Link</a>] . with that part too.
</td>
let $result := $comment/a[starts-with(@href, 'mypage.php')]/following-sibling::node()
return <message>{
$result[1]/substring-after(., ': '),
$result[position() > 1]
}</message>
由于 BaseX 支持 XQuery 3.0,您还可以利用辅助函数 head
和 tail
:
return <message>{
head($result)/substring-after(., ': '),
tail($result)
}</message>