[英]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.