java - 如何使用 Java 从 XML 中删除子元素?
问题描述
<definitions>
<form name="enable">
<data1>...</data1>
<data2>...</data2>
<data3>...</data3>
</form>
<form>
<data1>...</data1>
<data2>...</data2>
<data3>...</data3>
</form>
...
</definitions>
我想删除具有该name
属性的定义标记子元素(表单)。例如:在上述情况下,我想form
从文档中删除第一个元素。如何在java中做到这一点?
解决方案
删除所有具有该name
属性的表单的代码:
import java.io.File;
import javax.xml.parsers.*;
import javax.xml.transform.*;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;
import javax.xml.xpath.*;
import org.w3c.dom.*;
public class XMLDemo {
public static void main(String[] args) throws Exception {
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
Document document = dbf.newDocumentBuilder().parse(new File("input.xml"));
XPathFactory xpf = XPathFactory.newInstance();
XPath xpath = xpf.newXPath();
// Create XPathExpression object
XPathExpression expression = xpath.compile("/definitions/form[@name]");
// Evaluate expression result on XML document
NodeList nodes = (NodeList) expression.evaluate(document, XPathConstants.NODESET);
if (nodes.getLength() > 0) {
for (int i = 0; i < nodes.getLength(); i++) {
Node node = nodes.item(i);
node.getParentNode().removeChild(node);
}
}
TransformerFactory tf = TransformerFactory.newInstance();
Transformer t = tf.newTransformer();
t.transform(new DOMSource(document), new StreamResult(System.out));
}
}
如果您只想删除表单,请name = "enable"
进行此更改:
// Create XPathExpression object
XPathExpression expression = xpath.compile("/definitions/form[contains(@name, 'enable')]");
推荐阅读
- angular - 角循环依赖。服务-> 状态-> 服务。如何处理?
- vb.net - 如何将解析的变量注入脚本字符串?
- java - 无法使用spring boot从另一台服务器连接rabbitmq
- c# - 在 C# 中与嵌套列表作斗争
- java - 根据预订时长获取最受欢迎的酒店房间
- python - 从 pandas 表中过滤和可视化选择键和值
- arrays - 如何重新格式化此 Excel 工作表?
- r - 格式化数据框行而不是列
- django - 无法使用 AWS SES 通过位于 AWS EC2 中的 Django 应用程序发送电子邮件
- python - 具有相同正则表达式语句的 grep 和 python 之间的不同结果