转载请标明原创:https://me.csdn.net/jxysgzs
首先定义一个xml格式的字符串。
ps:用流读取成字符串的也一样,这里为了方便直接定义了。
<forms version="2.1">
<formExport>
<summary id="1132755668421070367" name="formmain_0031"/>
<definitions>
<column id="field0001" type="0" name="field1" length="255"/>
<column id="field0002" type="0" name="field2" length="256"/>
definitions>
<values>
<column name="field1">
<value>
建行一世
value>
column>
<column name="field2">
<value>
CSDN
value>
column>
values>
<subForms/>
formExport>
forms>
一、查询
查询标签内的属性。
例:获取
String xmlData="上面规定的xml字符串";
Document document= XmlUtil.parseXml(xmlData);
//获得XML文档根节点
Element elementG=XmlUtil.getRootElement(document);
//打印节点名称
System.out.println(elementG.getTagName());
//获取下层节点(该方法默认取第一个)
Element elementZ=XmlUtil.getElement(elementG,"formExport");
System.out.println(elementZ.getTagName());
//获取下层节点(该方法默认取第一个)
Element elementZ1=XmlUtil.getElement(elementZ,"definitions");
System.out.println(elementZ1.getTagName());
//获取下层节点(该方法默认取第一个)
Element elementZ2=XmlUtil.getElement(elementZ1,"column");
System.out.println(elementZ2.getTagName());
//读取属性length
System.out.println(elementZ2.getAttribute("length"));
查询一对标签中的文本
例:获取
String xmlData="上面规定的xml字符串";
Document document= XmlUtil.parseXml(xmlData);
//获得XML文档根节点
Element elementG=XmlUtil.getRootElement(document);
//打印节点名称
System.out.println(elementG.getTagName());
//获取下层节点(该方法默认取第一个)
Element elementZ=XmlUtil.getElement(elementG,"formExport");
System.out.println(elementZ.getTagName());
//获取下层节点(该方法默认取第一个)
Element elementZ_1=XmlUtil.getElement(elementZ,"values");
System.out.println(elementZ_1.getTagName());
//获取下层节点(该方法默认取第一个)
Element elementZ_2=XmlUtil.getElement(elementZ_1,"column");
System.out.println(elementZ_2.getTagName());
//获取到所有子标签
NodeList nodeList=elementZ_2.getElementsByTagName("value");
for (int i = 0; i <nodeList.getLength() ; i++) {
//打印标签的文本
System.out.println(nodeList.item(i).getTextContent());
}
打印结果
String xmlData="上面规定的xml字符串";
Document document= XmlUtil.parseXml(xmlData);
//获得XML文档根节点
Element elementG=XmlUtil.getRootElement(document);
//打印节点名称
System.out.println(elementG.getTagName());
//通过固定路径获取到数据
Object bString = XmlUtil.getByXPath("//forms/formExport/values/column/value", document, XPathConstants.STRING);
System.out.println("value元素节点值:"+bString);
打印结果
二、查询新增一个标签并赋值。
例:给
String xmlData="上面规定的xml字符串";
Document document= XmlUtil.parseXml(xmlData);
//获得XML文档根节点
Element elementG=XmlUtil.getRootElement(document);
//打印节点名称
//获取下层节点(该方法默认取第一个)
Element elementZ=XmlUtil.getElement(elementG,"formExport");
//获取下层节点(该方法默认取第一个)
Element elementZ_1=XmlUtil.getElement(elementZ,"values");
//获取下层节点(该方法默认取第一个)
Element elementZ_2=XmlUtil.getElement(elementZ_1,"column");
//创建一个标签
Element elementItem = document.createElement("value");
//赋值
elementItem.setTextContent("从零开始");
//放到某个标签下面
elementZ_2.appendChild(elementItem);
//获取到所有子标签
NodeList nodeList=elementZ_2.getElementsByTagName("value");
for (int i = 0; i <nodeList.getLength() ; i++) {
//打印标签的文本
System.out.println(nodeList.item(i).getTextContent());
}
System.out.println(XmlUtil.toStr(document));
打印结果
三、修改一个标签数据。
例:给
String xmlData="上面规定的xml字符串";
Document document= XmlUtil.parseXml(xmlData);
//获得XML文档根节点
Element elementG=XmlUtil.getRootElement(document);
//打印节点名称
//获取下层节点(该方法默认取第一个)
Element elementZ=XmlUtil.getElement(elementG,"formExport");
//获取下层节点(该方法默认取第一个)
Element elementZ_1=XmlUtil.getElement(elementZ,"values");
//获取下层节点(该方法默认取第一个)
Element elementZ_2=XmlUtil.getElement(elementZ_1,"column");
//获取到所有子标签
NodeList nodeList=elementZ_2.getElementsByTagName("value");
//第一次打印
for (int i = 0; i <nodeList.getLength() ; i++) {
//打印标签的文本
System.out.println(nodeList.item(i).getTextContent());
}
//修改
for (int i = 0; i <nodeList.getLength() ; i++) {
//这里进行修改******************************************************************
nodeList.item(i).setTextContent("张三丰");
}
//第二次打印
for (int i = 0; i <nodeList.getLength() ; i++) {
//打印标签的文本
System.out.println(nodeList.item(i).getTextContent());
}
打印结果
提示! 上面看上去有些同学肯定觉得比较复杂吧,这里代码量确实多,主要也是为了让大家能更快的理解并上手,后续同学们可以自己去封装一下好用的方法,这样就会简洁很多。
我这里临时使用写了个dome,需要的同学们拿走吧。
import cn.hutool.core.util.XmlUtil;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.NodeList;
import java.util.ArrayList;
import java.util.List;
/**
* @author 李建
* @version 1.0
* @date 2021/10/20 0020 15:37
*/
public class XmlStateUtil {
/**
* 查询element之下所有层级的文本数据
*
* @param element 根节点(上级节点)
* @param name 需要查询的节点名称,不需要加<>>
* @return
*/
public static List<String> getElementValueByName(Element element, String name) {
NodeList nodeList = element.getElementsByTagName(name);
List<String> stringList = new ArrayList<>();
for (int i = 0; i < nodeList.getLength(); i++) {
stringList.add(nodeList.item(i).getTextContent());
}
return stringList;
}
/**
* 编译xml字符串,查询所有层级的文本数据
*
* @param xmlData xml字符串
* @param name 需要查询的节点名称,不需要加<>>
* @return
*/
public static List<String> getXmlValueByName(String xmlData, String name) {
Document document = XmlUtil.parseXml(xmlData);
//获得XML文档根节点
Element elementG = XmlUtil.getRootElement(document);
return getElementValueByName(elementG, name);
}
/**
* 给一个节点下添加一个新的节点并赋值
*
* @param document 核心xml主要数据
* @param element 需要添加节点的节点
* @param tagName 节点名称
* @param value 节点文本
* @return
*/
public static void setXmlStrByElementAndText(Document document, Element element, String tagName, String value) {
Element elementItem = document.createElement(tagName);
elementItem.setTextContent(value);
element.appendChild(elementItem);
}
/**
* 根据表达式,获取最终目录下的第一个节点
* @param document 核心xml主数据
* @param url 表达式 例://forms/formExport/definitions/column
* @param number 按顺序第一几个节点,最小为第一个
* @return
*/
public static Element getElementByUrl(Document document, String url, int number) {
NodeList nodeList=XmlUtil.getNodeListByXPath(url,document);
List<Element> elementList=XmlUtil.transElements(nodeList);
return elementList.get(number>0?number:0);
}
}
喜欢的同学给个免费的点赞吧,Thanks♪(・ω・)ノ