首页
学习
活动
专区
圈层
工具
发布

jsoup -)
EN

Stack Overflow用户
提问于 2014-06-10 15:49:40
回答 1查看 1.3K关注 0票数 1

当我解析本地HTML文件时,jsoup会将锚元素中的引号更改为&掩盖我的HTML。

让我们假设我希望将以下HTML部分中的值“一”更改为“二”:

代码语言:javascript
复制
<div class="pg2-txt1">
  <a class="foo" appareantly_a_javascript_statement='{"targetId":"pg1-magn1", "ordinal":1}'>one</a>
</div>

我得到的是:

代码语言:javascript
复制
<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>

锚元素中的引号是必需的。我的代码现在看起来如下:

代码语言:javascript
复制
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

我试过了

代码语言:javascript
复制
doc.outputSettings().prettyPrint(false);

但没有成功。

我能用jsoup来达到这个目的吗?我需要使用不同的解析器吗?那会是什么样子呢?

先谢谢你。

EN

回答 1

Stack Overflow用户

发布于 2014-06-10 17:14:12

根据html规范 JSoup的说法,它的行为非常好:

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

注意最后一句!

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

我认为有两种解决办法:

1)修改解释appareantly_a_javascript_statement值的函数

我在那里帮不了你,因为我不知道它是在哪里做的。

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

这太讨厌了..。

代码语言:javascript
复制
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);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24145426

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档