我试图通过StringBuilder传递一个XML对象,以便与对象进行比较,以符合我的需要。
我想知道是否有一种很好的方法可以从整个字符串中删除特定的标记。下面我准备了一个例子:
原件:
<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>
期望的结果:
<ApprovalSet>
<ApprovalItem application="Annotext" name="ApprovalItemName" nativeIdentity="xxx12345" operation="Add" value="G1"/>
</ApprovalSet>
所以基本上,我想删除id、state和整个注释,并关闭ApprovalItem标记(或者只删除所有斜杠)。
有什么想法吗?提前感谢:)
乔纳斯
我建议使用XML解析器,而不是字符串操作或正则表达式。如果您只需要删除一些元素和属性,那么您可能需要研究Jsoup,它实际上是一个HTML解析器,但也可以处理XML,并且非常直观。使用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);
}
}
输出
<ApprovalSet>
<ApprovalItem application="Annotext" name="ApprovalItemName" nativeIdentity="xxx12345" operation="Add" value="G1">
</ApprovalItem>
</ApprovalSet>
mvn依赖
<!-- https://mvnrepository.com/artifact/org.jsoup/jsoup -->
<dependency>
<groupId>org.jsoup</groupId>
<artifactId>jsoup</artifactId>
<version>1.13.1</version>
</dependency>
问题内容: 我有一个xml,如下所示: 现在,我想删除标记,但在此处保留内容“ ABCD”。或者有没有一种方法可以使用java从整个XML文件中删除。请帮忙。谢谢。 问题答案: 使用DOM4J或SAX解析器解析文档 从标签中获取价值 从值中删除所有html标签 JSoup三通 字符串替换 将新值设置为XML字体标签
问题内容: 我需要一些帮助,使用bash工具解决几个问题 我想从文件中删除空的xml标记,例如: 成为: 为此,我已经通过此命令这样做 并不是那么严格,它更像是一个把戏,更合适的方法是找到并删除它。建议? 二,如何去: 至: 整体而言?从: 至: 您可以个人回答问题吗?非常感谢你! 问题答案: (posix版本,例如GNU sed) 递归地将空标签从下杆移到上杆,直到不再有空标签。 不是XML解析
问题内容: 我正在寻找一个简单的Java代码段,以从(任何)XML结构中删除空标签 应该变成 问题答案: 我想知道使用XOM库这样做是否容易,并尝试一下。 事实证明这很容易: 这可能无法正确处理所有极端情况,例如完全空的文档。对于原本为空但具有属性的元素该怎么办? 如果要保存带有属性的XML标签,我们可以在方法’handleNode’中添加以下检查: 另外,如果xml有两个或多个空标记,则一个接一
问题内容: 题 如何在PHP中删除空的xml标记? 例: XML结果: 我想要的是! 不含空标签(如“ tag3”)的XML 谢谢! 问题答案: 您可以将XPath与谓词 一起使用,以选择所有没有子节点的元素。 版画
Quickly removes tag, found by “Match Tag Pair” from current caret position, and adjusts indentation. 快速删除标签,并调整缩进。这里的标签是在插入符所在位置由 匹配标签 功能查找的标签。 <body> <div |class="wrapper"> <h1>Title</h1>
问题内容: 我正在使用创建一个xml 在此上添加一些属性后,当我尝试打印它时,它看起来像这样, 有没有办法删除xml版本节点?谢谢 问题答案: 从理论上讲,您可以提供保存文档时删除XML声明的选项,但这仅在Libxml> = 2.6.21(和buggy)中可用。一种替代方法是使用