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

Jsoup-如何使用自动关闭创建我自己的标记

华宇
2023-03-14

我使用JSoup从html文档中提取某些标记。但是,我需要用团队创建的一些标记来更改其中的一些。

示例

<inline id="inline-1" />  --->  <abc:123 input="1"/>

检查我的标签是否需要自动关闭标签。有线索吗?谢谢

共有1个答案

羊舌胡非
2023-03-14

您可以使用新元素(Jsoup.parse(

import org.jsoup.parser.Parser;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;
import org.jsoup.nodes.Attributes;
import org.jsoup.nodes.Attribute;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Entities.EscapeMode;
import org.jsoup.Jsoup;
import java.util.ArrayList;
import java.util.*; 
import org.jsoup.parser.Tag;
public class MyClass {
    public static void main(String args[]) {
    String body = "<inline id=\"inline-1\" />";
    Document doc = Jsoup.parse(body);
    System.out.println("Original:\n"+doc.html()+"\n");
    System.out.println("Replaced:\n"+replaceTagWithCustom(doc, "inline", "<abc:123 />").html());
    //You can then add attribute as you want
    doc.getElementsByTag("abc:123").first().attr("input", "1");
    System.out.println("\nReplaced with attributes:\n"+doc.html());
}

    static Document replaceTagWithCustom(Document doc, String original, String replacement){
        //Can be changed to select to get multiple elements
        Element el = doc.selectFirst(original); 
        //Change tagname while conserving self closing(Note: requires format <(yourtag) /> to add self closing)
        Element el2 = new Element(Jsoup.parse(replacement).body().child(0).tag(),"").html(el.html());
        //Strip all attributes
        List<String>  attToRemove = new ArrayList<>();
        Attributes at = el.attributes();
        for (Attribute a : at) {
            attToRemove.add(a.getKey());
        }
        for(String att : attToRemove) {
            el.removeAttr(att);
        }
        el.replaceWith(el2);
        return doc;
    }
}
Original:
<html>
 <head></head>
 <body>
  <inline id="inline-1" />
 </body>
</html>

Replaced:
<html>
 <head></head>
 <body>
  <abc:123 />
 </body>
</html>

Replaced with attributes:
<html>
 <head></head>
 <body>
  <abc:123 input="1" />
 </body>
</html>

参考:允许为标记配置自动关闭-Legioth
SO:用Jsoup替换标记-Hardik Lotiya
SO:删除属性-Xtroce
Jsoup:修改属性

 类似资料:
  • 问题内容: 我有一个(旧的)工具,该工具不了解像这样的自动关闭标签。所以,我们需要序列与这样的开启/关闭的标签我们的XML文件:。 目前我有: 如何使用打开/关闭的标签进行序列化? 解 由wildwilhelm给出,如下: 问题答案: 似乎标签已分配了的属性: 如果将标记的属性设置为空字符串,则应获得所需的内容: 考虑到这一点,您可能可以在编写XML之前遍历DOM树并修复属性。像这样:

  • 如果您在开发共享库的公司工作,或者您在开源或商业库中工作,则可能需要开发自己的自动配置。 自动配置类可以捆绑在外部jar中,仍然可以通过Spring Boot获取。 自动配置可以与“启动器”相关联,该“启动器”提供自动配置代码以及您将使用它的典型库。 我们首先介绍了构建自己的自动配置需要了解的内容,然后我们将继续介绍创建自定义启动器所需的典型步骤。 可以使用演示项目来展示如何逐步创建启动器。 4.

  • 问题内容: 我想用继承自JFrame icon的icon创建我自己的文件,并在java中对其进行设置,而我自己的文件使用FileOutputStream和ObjectOutputStream Thank you in advance 问题答案: @David是对的,因为主机平台拥有这些装饰,但是您可以使用这些图标,这些图标通常可以 概括该平台的图标。例如, 其他装饰默认列举 here. SSCCE

  • 我有两段XML,其中一部分是:

  • 问题内容: 我用Java创建了一个程序,并对其进行了设计,以使我希望它们出现在主体中的方法(getter方法)在启动包含这些方法的类之后可以轻松地调用它们。 问题是,我需要使这个应用程序(包含getter方法)像一个API,以便我可以让我的应用程序供开发人员在需要时使用我的函数(getter方法),并且只使用它们所需要的功能。需要添加此文件(我认为完成后的API显示为.jar文件)。 我该如何做到

  • 问题内容: 我正在创建一个用于多个不同android应用程序的登录屏幕。打包它的最佳方法是什么,以便其他人可以在他们的应用程序上使用我的登录功能。如果我们要进行更改,最好将它们自动同步。编辑*看来将其打包到一个库模块中是最好的选择。如何上载此模块,以便如果我们对此模块进行更新,则它将无缝更新,而不必从github中获取。 谢谢! 问题答案: 如果您已将代码推送到GitHub,则使用JitPack可