当前位置: 首页 > 知识库问答 >
问题:

jsoup -阻止jsoup对

濮景龙
2023-03-14

当我解析本地HTML文件时,jsoup将锚元素中的引号改为

假设我想将下面HTML部分中的值“一”改为“二”:

<div class="pg2-txt1">
  <a class="foo" appareantly_a_javascript_statement='{"targetId":"pg1-magn1", "ordinal":1}'>one</a>
</div>

我得到的是:

<div class="pg2-txt1">
  <a class="foo" appareantly_a_javascript_statement="{&quot;targetId&quot;:&quot;pg1-magn1&quot;, &quot;ordinal&quot;:1}">two</a>
</div>

锚点元素内的引号是必需的。我的代码现在看起来像这样:

File input = new File("D:/javatest/page02.html");
Document doc = Jsoup.parse(input, "UTF-8");
Element div = doc.select("div.pg2-txt1").first(); //anchor element only identifyable by parent <div> class
div.child(0).text("one"); //actual anchor element

我试过了

doc.outputSettings().prettyPrint(false);

没有成功。

我可以用jsoup实现这一点吗?我必须使用不同的解析器吗?那看起来会是什么样子。

提前非常感谢你。

共有1个答案

岳城
2023-03-14

根据html规范,JSoup表现完全良好:

默认情况下,SGML要求使用双引号(ASCII十进制34)或单引号(ASCII十进制39)分隔所有属性值。当值由双引号分隔时,单引号可以包含在属性值中,反之亦然。作者也可以使用数字字符引用来表示双引号(")和单引号(')。对于双引号,作者还可以使用字符实体引用

注意最后一句话!

基本上,这意味着,在appareantly_a_javascript_statement属性中需要双引号的其他软件正在对其值进行一些不完整的解析

我认为有两种解决方案:

1) 修改解释appareanly_a_javascript_statement值的函数

我不能在那里帮助你,因为我不知道它在哪里完成。

2)通过正则表达式更改Jsoup输出。

这是相当hacky...

String html = doc.outerHtml();
boolean changed = false;
html = html.replaceAll("(=\"\\{)([^\"]+)(\")", "='{$2'");
do{
    int oldLength = html.length();  
    html = html.replaceAll("(=')([^']+)(\\&quot;)([^\']+)(')", "$1$2\"$4$5");
    changed = html.length() != oldLength;
}while(changed);
System.out.print(html);

 类似资料:
  • 问题内容: 在大多数情况下,使用jsoup解析XML都没有问题。但是,如果有XML文档中的标签,jsoup将改变到。这样就无法使用CSS选择器提取标签内的文本。 那么如何防止jsoup“清除” 标签呢? 问题答案: 在jsoup 1.6.2中, 我添加了XML解析器模式,该模式可以按原样解析输入,而无需应用HTML5解析规则(元素内容,文档结构等)。此模式将文本保留在标签中,并允许其倍数等。 这是

  • jsoup 是一款 Java 的 HTML 解析器,可直接解析某个 URL 地址、HTML 文本内容。它提供了一套非常省力的 API,可通过 DOM、CSS 以及类似于 JQuery 的操作方法来取出和操作数据。 本站使用 jsoup 来解析 HTML。 jsoup的主要功能如下: 从一个URL,文件或字符串中解析HTML; 使用DOM或CSS选择器来查找、取出数据; 可操作HTML元素、属性、文

  • 主要内容:1 通过 maven pom.xml 文件,2 通过下载jsoup.jar文件要运行任何 jsoup 程序,您需要安装 jsoup。本教程用的版本是1.8.1。 jsoup 有两种安装方式: 通过 maven pom.xml 通过jsoup.jar 文件。 1 通过 maven pom.xml 文件 目前maven广泛用于java开发。所以我会推荐你​​使用 maven 来开发 jsoup 应用程序。 要使用 maven 安装 jsoup,请在 pom.xml 文件中添加给

  • Jsoup 是一个基于 Java 的库,用于处理基于 HTML 的内容。它提供了一个非常方便的 API 来提取和操作数据,使用最好的 DOM、CSS 和类似 jquery 的方法。它实现了 WHATWG HTML5 规范,并将 HTML 解析为与现代浏览器相同的 DOM。 Jsoup 库实现了 WHATWG HTML5 规范,并将 HTML 内容解析为与现代浏览器相同的 DOM。 Jsonp 库提

  • 在少数情况下,我会传递JSON,其中包含用户执行某些操作的页面url。该页面url将有那些查询字符串部分,我需要为用户重定向到相同的页面时,从我的应用程序要求。我的JSON会像 但是当我通过运行这个json时,我看到

  • 我正在尝试使用jSoup刮一个网站,有以下内容。我对jSoup很陌生,还在想办法。我想做的是能够采取的产品名称和价格,并把他们放入一个excel文件的名称在A列和价格在B列,0.00可以忽略或放在C列,无论什么更容易。任何帮助都将是伟大的,因为我知道有人会问,这不是一个家庭作业。 谢谢提前,我真的很感激。 **这是否是表元素,因为这是列表前的“表”代码,如果不是,我应该在html代码中查找什么?