之前我曾问过类似的问题,但这个问题略有不同
我对以下这类链接感到满意:
<a href=""ssLINK/prof-steve-jackson"">Professor Steve Jackson</a>
[UPDATE]
这就是我读它的方式:
content = doc.xpath("/wcm:root/wcm:element[@name='Body']").inner_text
链接在href=
之后有两对双引号。
我正在尝试删除标记并仅检索文本:
Professor Steve Jackson
要做到这一点,我使用的方法适用于只有一对双引号的链接:
<a href="ssLINK/world">World</a>
这将返回World:
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)
任何人都知道如何克服这个问题?
答案 0 :(得分:0)
我可以建议你采用两种方法,但这取决于:每个<a>
标记是否包含href,其中两个""
包围它们,或者它只是带有ssLINK的标记
假设
output = []
input_text = '<a href=""ssLINK/prof-steve-jackson"">Professor Steve Jackson</a>'
1)如果a
代码仅与""
进行了ssLink
的href,那么只需执行
Nokogiri::HTML(input_text).css('a[href=""]').each do |nokogiri_obj|
output << nokogiri_obj.text
end
# => output = ["Professor Steve Jackson"]
2)如果所有a
代码都与h ""
进行了对比,那么你可以试试这个
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"]
答案 1 :(得分:0)
您的内容不是XML,因此任何使用XSLT和XPath等XML工具解决问题的尝试都注定要失败。使用正则表达式方法,例如awk或Perl。但是,对我来说,如何匹配
并不是很明显<a href="" sometext"">
没有匹配
<a href="" sometext="">
因此我们需要了解您尝试解析的语法。