简体   繁体   English

Java StringBuilder 移除 XML 标签

[英]Java StringBuilder remove XML Tags

I'm trying to pass a XML object through a StringBuilder to compare to Objects, fitting to my needs.我正在尝试通过 StringBuilder 传递 XML 对象以与对象进行比较,以符合我的需要。

I was wondering if there is a nice way to remove specific tags from the whole String.我想知道是否有一种从整个字符串中删除特定标签的好方法。 Underneath I prepared an example:下面我准备了一个例子:

Original:原来的:

<ApprovalSet>
   <ApprovalItem application="Annotext" id="a089989361v451cag47e9f5e9a35716" name="ApprovalItemName" nativeIdentity="xxx12345" operation="Add" state="Finished" value="G1">
       <ApprovalItemComments>
          <Comment author="Random Guy" comment="THE NAME" date="1657122647591"/>
      </ApprovalItemComments>
   </ApprovalItem>
</ApprovalSet>

Desired Outcome:期望的结果:

<ApprovalSet>
   <ApprovalItem application="Annotext" name="ApprovalItemName" nativeIdentity="xxx12345" operation="Add" value="G1"/>
</ApprovalSet>

So basically, I want to remove the id, state and the whole comment and close the ApprovalItem Tag (or just remove all slashes).所以基本上,我想删除 id、状态和整个评论并关闭 ApprovalItem 标签(或者只是删除所有斜杠)。

Any ideas?有任何想法吗? Thank you in advance :)先感谢您 :)

Jonas乔纳斯

Instead of string manipulation or regex, I would recomend to use a XML-parser.我建议使用 XML 解析器,而不是字符串操作或正则表达式。 If all you need is to remove some elemnts and some attributes, you might want to look into Jsoup , which is actually a HTML-parser but can also handel XML and is very intuitive to work with.如果您只需要删除一些元素和一些属性,您可能需要查看Jsoup ,它实际上是一个 HTML 解析器,但也可以处理 XML,并且使用起来非常直观。 Using Jsoup your code could look like:使用 Jsoup,您的代码可能如下所示:

import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.parser.Parser;
import org.jsoup.select.Elements;

public class Example {
    public static void main (String[] args) {
        String originalXml = 
                  "<ApprovalSet>\n"
                + "   <ApprovalItem application=\"Annotext\" id=\"a089989361v451cag47e9f5e9a35716\" name=\"ApprovalItemName\" nativeIdentity=\"xxx12345\" operation=\"Add\" state=\"Finished\" value=\"G1\">\n"
                + "       <ApprovalItemComments>\n"
                + "          <Comment author=\"Random Guy\" comment=\"THE NAME\" date=\"1657122647591\"/>\n"
                + "      </ApprovalItemComments>\n"
                + "   </ApprovalItem>\n"
                + "</ApprovalSet>";

        Document doc = Jsoup.parse(originalXml, "", Parser.xmlParser());

        Element approvalSet  = doc.selectFirst("ApprovalSet");
        Element approvalItem = doc.selectFirst("ApprovalItem");
        Elements comments    = approvalItem.select("ApprovalItemComments");

        approvalItem.removeAttr("id").removeAttr("state");
        comments.remove();

        String result = approvalSet.toString();

        System.out.println(result);
    }
}

output输出

<ApprovalSet> 
 <ApprovalItem application="Annotext" name="ApprovalItemName" nativeIdentity="xxx12345" operation="Add" value="G1">  
 </ApprovalItem> 
</ApprovalSet>

mvn dependency mvn 依赖

<!-- https://mvnrepository.com/artifact/org.jsoup/jsoup -->
<dependency>
    <groupId>org.jsoup</groupId>
    <artifactId>jsoup</artifactId>
    <version>1.13.1</version>
</dependency>

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM