import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.NodeList;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
public class XmlAnalysis {
private String xml; // XML 字符串
private String ProductContent; // <Product> 标签内容
private String ProjectInfoContent; // <ProjectInfo> 标签内容
public XmlAnalysis(String xml) {
this.xml = xml;
ProductContent = "";
ProjectInfoContent = "";
// 创建 DOM 解析器工厂
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
try {
// 创建 DOM 解析器
DocumentBuilder builder = factory.newDocumentBuilder();
// 将 XML 字符串转换为输入流
ByteArrayInputStream input = new ByteArrayInputStream(xml.getBytes());
// 解析输入流,得到文档对象模型(DOM)
Document document = builder.parse(input);
// 获取 <Product> 标签
NodeList productNodeList = document.getElementsByTagName("Product");
// 遍历节点列表,取出每个 <Product> 标签及其内容
for (int i = 0; i < productNodeList.getLength(); i++) {
Element element = (Element) productNodeList.item(i);
String content = getNodeAsString(element); // 获取标签及其内容
String content = element.getTextContent(); // 获取标签内的文本内容
ProductContent += content;
System.out.println("<Product>: " + content);
}
// 获取 <ProjectInfo> 标签
NodeList projectInfoNodeList = document.getElementsByTagName("ProjectInfo");
// 遍历节点列表,取出每个 <ProjectInfo> 标签及其内容
for (int i = 0; i < projectInfoNodeList.getLength(); i++) {
Element element = (Element) projectInfoNodeList.item(i);
String content = getNodeAsString(element);
String content = element.getTextContent(); // 获取标签内的文本内容
ProjectInfoContent += content;
System.out.println("<ProjectInfo>: " + content);
}
} catch (Exception e) {
e.printStackTrace();
}
}
private String getNodeAsString(Element element) {
StringBuilder builder = new StringBuilder();
// 开始标签
builder.append("<").append(element.getTagName()).append(">");
// 处理子节点
NodeList childNodes = element.getChildNodes();
for (int i = 0; i < childNodes.getLength(); i++) {
builder.append(nodeToString(childNodes.item(i)));
}
// 结束标签
builder.append("</").append(element.getTagName()).append(">");
return builder.toString();
}
private String nodeToString(org.w3c.dom.Node node) {
StringBuilder builder = new StringBuilder();
// 文本节点
if (node.getNodeType() == org.w3c.dom.Node.TEXT_NODE) {
builder.append(node.getNodeValue());
}
// 元素节点
else if (node.getNodeType() == org.w3c.dom.Node.ELEMENT_NODE) {
Element element = (Element) node;
builder.append(getNodeAsString(element));
}
return builder.toString();
}
public String getProductContent() {
return ProductContent;
}
public String getProjectInfoContent() {
return ProjectInfoContent;
}
// 测试示例
public static void main(String[] args) {
String xml = "<?xml version=\"1.0\" encoding=\"UTF-8\"?><TestProjectInfo><Products><Product><Model>XXX(XX)</Model></Product><Product><Model>XXX(XX)</Model><TuHao>hq10</TuHao><CpName>HQ-10</CpName><CpCode>Z06-TEST01</CpCode><BatchCode>Z06</BatchCode><DaiHao /><BanBen>/</BanBen></Product></Products><ProjectList><ProjectInfo><ProjectTestInfo><ID></ID><Name>装配准备</Name><Code></Code><Gongxh>10</Gongxh><OldGongxh>12</OldGongxh><GongxName>装配准备</GongxName><ProcVersion>A.6</ProcVersion><TechDoc>XM07.01-001</TechDoc><PlanBeginDate>2023-03-31 12:00:00</PlanBeginDate><PlanEndDate>2023-03-31 12:00:00</PlanEndDate><RealStartTime>2023-04-01 12:00:00</RealStartTime><RealEndTime>2023-04-02 12:00:00</RealEndTime><TaskSendTime>2023-04-03 12:00:00</TaskSendTime><Stage>Z</Stage><FuZeRen>shixiao</FuZeRen><CaoZuoRen>houenwei</CaoZuoRen><Status></Status><Miji></Miji><Sycd></Sycd><Xqbm>光导部</Xqbm><Czbm>光导部</Czbm><WorkCenter>光学导航与探测事业部</WorkCenter><Intention></Intention><Note></Note><TestBrief></TestBrief><TaskBook></TaskBook><TbomId></TbomId><Kzxx></Kzxx><Documents><Document><FileID>http://10.122.254.25:9000/otatest/10_ZLJL2303030001_A.6_20230403_145319977.json</FileID><FileName>30_ZLJL2304010005_B.8_20230401_184543851.json</FileName></Document></Documents></ProjectTestInfo><CanYuRens><CaoZuoRen>houenwei</CaoZuoRen></CanYuRens></ProjectInfo></ProjectList></TestProjectInfo>";
XmlAnalysis xmlAnalysis = new XmlAnalysis(xml);
String productContent = xmlAnalysis.getProductContent();
String projectInfoContent = xmlAnalysis.getProjectInfoContent();
System.out.println("Product Content: " + productContent);
System.out.println("ProjectInfo Content: " + projectInfoContent);
}
}