替换<a>具有两对双引号的标记



我以前问过一个类似的问题,但这个问题略有不同

我有这种链接的内容:

<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="">

因此,我们需要更多地了解您尝试解析的语法。

相关内容

  • 没有找到相关文章

最新更新