Java 解析器JSoup将标记更改为小写字母
我做了一些研究,似乎是标准的Jsoup做出了这个改变。我想知道是否有办法配置它,或者是否有其他解析器可以转换为Jsoup的文档,或者有办法解决这个问题?不幸的是,没有,Java 解析器JSoup将标记更改为小写字母,java,jsoup,Java,Jsoup,我做了一些研究,似乎是标准的Jsoup做出了这个改变。我想知道是否有办法配置它,或者是否有其他解析器可以转换为Jsoup的文档,或者有办法解决这个问题?不幸的是,没有,标记的构造函数将名称更改为小写: private Tag(String tagName) { this.tagName = tagName.toLowerCase(); } 但有两种方法可以改变这种行为: 如果需要干净的解决方案,可以克隆/下载并更改此行 如果想要脏的解决方案,可以使用反射 第2条的示例: Field t
标记的构造函数将名称更改为小写:
private Tag(String tagName) {
this.tagName = tagName.toLowerCase();
}
但有两种方法可以改变这种行为:
如果需要干净的解决方案,可以克隆/下载并更改此行
如果想要脏的解决方案,可以使用反射
第2条的示例:
Field tagName = Tag.class.getDeclaredField("tagName"); // Get the field which contains the tagname
tagName.setAccessible(true); // Set accessible to allow changes
for( Element element : doc.select("*") ) // Iterate over all tags
{
Tag tag = element.tag(); // Get the tag of the element
String value = tagName.get(tag).toString(); // Get the value (= name) of the tag
if( !value.startsWith("#") ) // You can ignore all tags starting with a '#'
{
tagName.set(tag, value.toUpperCase()); // Set the tagname to the uppercase
}
}
tagName.setAccessible(false); // Revert to false
版本1.9.3中引入了ParseSettings类。
它带有保留标记和属性大小写的选项。我使用的是1.11.1-SNAPSHOT版本,它没有这段代码
private Tag(String tagName) {
this.tagName = tagName.toLowerCase();
}
因此,我按照上面的建议检查了ParseSettings
,并将这段代码从:
static {
htmlDefault = new ParseSettings(false, false);
preserveCase = new ParseSettings(true, true);
}
致:
并在构建JAR时跳过了测试用例。下面是一个代码示例(版本>=1.11.x):
您必须使用xmlParser而不是htmlParser,并且标记将保持不变。一句话就可以做到:
String html = "<camelCaseTag>some text</camelCaseTag>";
Document doc = Jsoup.parse(html, "", Parser.xmlParser());
String html=“一些文本”;
Document doc=Jsoup.parse(html,“,Parser.xmlParser());
我不得不更改您提到的大部分代码,但使用第一种方法效果很好。谢谢你的提示。1真的是这样的努力吗?我假设只有这一行需要更改,因为我不只是使用解析器,而是使用其他函数来更改。如果需要的话,我可以在某个地方发布取消更改的库…你必须更改的类的名称将非常棒:-)。。。仅出于个人利益。尝试解决方案1。不工作。还有哪些类需要修改?
Parser parser = Parser.htmlParser();
parser.settings(new ParseSettings(true, true));
Document doc = parser.parseInput(html, baseUrl);
String html = "<camelCaseTag>some text</camelCaseTag>";
Document doc = Jsoup.parse(html, "", Parser.xmlParser());