我以前问过一个类似的问题,但这个问题略有不同
我有这种链接的内容:
<a href=""ssLINK/prof-steve-jackson"">Professor Steve Jackson</a>
[更新]
这就是我读它的方式:
content = doc.xpath("/wcm:root/wcm:element[@name='Body']").inner_text
链接在href=
后有两对双引号。
我正在尝试去除标签并仅检索文本,如下所示:
Professor Steve Jackson
为此,我使用了适用于这种只有一对双引号的链接的相同方法:
<a href="ssLINK/world">World</a>
这将返回世界:
content = Nokogiri::XML.fragment(content_with_link)
content.css('a[href^="ssLINK"]')
.each{|a| a.replace("<>#{a.content}</>")}
=>World
当我尝试对具有两对双引号的链接执行相同的操作时,它会抱怨:
content = Nokogiri::XML.fragment(content_with_link)
content.css('a[href^=""ssLINK""]')
.each{|a| a.replace("<>#{a.content}</>")}
错误:
/var/lib/gems/1.9.1/gems/nokogiri-1.6.0/lib/nokogiri/css/parser_extras.rb:87:in
`on_error': unexpected 'ssLINK' after '[:prefix_match, """"]' (Nokogiri::CSS::SyntaxError)
有人知道我如何克服这个问题吗?
我可以向您推荐两种方法,但这取决于:每个<a>
标签都有带有两个""
包围它们的href,或者它只是带有ssLINK的href
假设
output = []
input_text = '<a href=""ssLINK/prof-steve-jackson"">Professor Steve Jackson</a>'
1)如果a
标签的href只有""
ssLink
那么就做
Nokogiri::HTML(input_text).css('a[href=""]').each do |nokogiri_obj|
output << nokogiri_obj.text
end
# => output = ["Professor Steve Jackson"]
2)如果所有a
标签都有带有""
的href,那么您可以尝试此操作
nokogiri_a_tag_obj = Nokogiri::HTML(input_text).css('a[href=""]')
nokogiri_a_tag_obj.each do |nokogiri_obj|
output << nokogiri_obj.text if nokogiri_obj.has_attribute?('sslink')
end
# => output = ["Professor Steve Jackson"]
使用第二种方法,如果
input_text = '<a href=""ssLINK/prof-steve-jackson"">Professor Steve Jackson</a> Some other Text<a href=""abcd"">Second link</a>'
然后输出也将["Professor Steve Jackson"]
您的内容不是XML,因此任何使用XML工具(如XSLT和XPath)解决问题的尝试都注定要失败。使用正则表达式方法,例如awk或Perl。但是,如何匹配对我来说并不明显
<a href="" sometext"">
没有也匹配
<a href="" sometext="">
因此,我们需要更多地了解您尝试解析的语法。