我有一个包含数据的HTML文档:
/**
* Get ISO 3166-1 alpha-2 country code for this device (or null if not available)
* @param context Context reference to get the TelephonyManager instance from
* @return country code or null
*/
public static String getUserCountry(Context context) {
try {
final TelephonyManager tm = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);
final String simCountry = tm.getSimCountryIso();
if (simCountry != null && simCountry.length() == 2) { // SIM country code is available
return simCountry.toLowerCase(Locale.US);
}
else if (tm.getPhoneType() != TelephonyManager.PHONE_TYPE_CDMA) { // device is not 3G (would be unreliable)
String networkCountry = tm.getNetworkCountryIso();
if (networkCountry != null && networkCountry.length() == 2) { // network country code is available
return networkCountry.toLowerCase(Locale.US);
}
}
}
catch (Exception e) { }
return null;
}
解析时使用:
<div>
<p class="someclass">
<ul>
<li>Item 1</li>
<li>Item 2</li>
</ul>
</p>
</div>
当我检查数据库时,我只获得外部div_node.children.each do |child|
if child.node_name == 'p'
#store it as html string in db
store(child.to_html)
end
end
标记:
<p>
不存储或检索内部<p class="someclass">
</p>
标记内容。
我知道<ul>
标记不能包含<p>
标记,但我们从客户端获取的文档包含数据,并且大约有1000个文档包含数据,因此我无法手动编辑它们
答案 0 :(得分:1)
尝试使用Nokogiri::XML
解析器而不是Nokogiri::HTML
解析器。它不应该关心标记语义,但我不确定它将如何处理HTML5中那些不是有效XML的部分。
答案 1 :(得分:1)
我最终使用Nokogiri::XML
解析器来解析HTML
doc
我不得不在很多地方改变我的剧本
解析代码
@xml_doc = Nokogiri::XML.parse(file) { |cfg| cfg.noblanks }
@xml_doc.remove_namespaces!
完成更改
attribute
方法更改为attr
attr
方法链接text
node.to_html
就像一个魅力,所以我能够在db