Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/91.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何仅从HTML文档中提取粗体文本?_Java_Html_Parsing_Jsoup - Fatal编程技术网

Java 如何仅从HTML文档中提取粗体文本?

Java 如何仅从HTML文档中提取粗体文本?,java,html,parsing,jsoup,Java,Html,Parsing,Jsoup,我需要提取HTML文档正文中的所有粗体代码段。我需要在服务器端使用Java(而不是在浏览器上)执行此操作 页面上的文本可以是粗体,因为标签,例如,等,或者因为内联CSS样式style=“font-weight:bold;”“,或者因为使用CSS类别的外部CSS样式 我正在使用Jsoup,但我也可以使用任何其他库来完成这项工作 谢谢你的时间 您可以使用getElementsByTagName() 此外,也可能有用querySelectorAll 祝你好运,Daniel对于标签和内联样式(例如,

我需要提取HTML文档正文中的所有粗体代码段。我需要在服务器端使用Java(而不是在浏览器上)执行此操作

页面上的文本可以是粗体,因为标签,例如
等,或者因为内联CSS样式
style=“font-weight:bold;”“
,或者因为使用CSS类别的外部CSS样式

我正在使用Jsoup,但我也可以使用任何其他库来完成这项工作


谢谢你的时间

您可以使用getElementsByTagName()

此外,也可能有用querySelectorAll


祝你好运,Daniel对于标签和内联样式(例如,直接添加到html中的样式,不包含在外部css样式表中),你可以使用css选择器。(对于内联样式,应该是
[style*=“font-weight:bold;”]
)。

简单的JavaScript解决方案:在足够新的浏览器上,可以使用
getPropertyValue
方法检索元素的计算样式。您可以遍历文档树并检查所有文本节点;文本节点没有样式,因此需要检查其父节点:

function consume(string) {
  console.log(string);
}
function traverse(tree) {
  var i;
  if(tree.nodeType === 3) {
    if(getComputedStyle(tree.parentNode).getPropertyValue('font-weight') === 'bold') {
      consume(tree.textContent);
    }
  }
  for(i = 0; i < tree.childNodes.length; i++) {
    traverse(tree.childNodes[i]);
  }
}
traverse(document.body);
函数消耗(字符串){
console.log(字符串);
}
函数遍历(树){
var i;
if(tree.nodeType==3){
if(getComputedStyle(tree.parentNode).getPropertyValue('font-weight')=='bold'){
消费(tree.textContent);
}
}
对于(i=0;i
用自己处理粗体文本的函数替换
consume

即使声明为
700
时,
font-weight
的计算值似乎也是
bold


请注意,这将仅拾取字体权重专门设置为粗体(700)的文本。计算字重为600、800或900的元素很可能以粗体显示(当然取决于字体的可用性)。可以通过对测试进行明显的修改来覆盖它们。

只需按标记名抓取元素,然后循环:

elem = document.getElementsByTagName("b");

for(i=0;i<elem.length;i++) {
    console.log(elem[i].innerText)
}
elem=document.getElementsByTagName(“b”);

对于(i=0;i)页面是否有定义的结构,或者是否可以改变?如果可能,请发布一个示例HTML页面。为什么添加javascript标记?Java更合适?否?如果您想在“服务器端”执行此操作,您应该将问题标记为“Java”.Jukka K.Korpela花了一些时间为您提供了一个令人敬畏的高质量解决方案,而您却接受了一个有缺陷且便宜的解决方案,编辑您的问题和标签,使其“适合”解决方案。我为Slytael感到抱歉。我的错!谢谢你添加了标签。那么通过外部样式表加粗的文本呢?在我看来,jsoup是不可能的。然后他必须找到另一个库或写下css解析器。Op没有指定他是否必须处理外部css样式表,因此我给了他一个解决方案,指定了我需要的内容很好。你也有Java服务器端的解决方案吗?这不是一个很好的答案。请参阅“你必须解释应该做什么”,而不仅仅是链接到一个可能的答案