import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.DocumentBuilder;
import org.w3c.dom.Document;
import org.w3c.dom.NodeList;
import org.w3c.dom.Node;
import org.w3c.dom.NamedNodeMap;
import org.xml.sax.InputSource;
import java.io.StringReader;
public class XMLParser {
public static void main(String[] args) {
try {
//File inputFile = new File("input.xml"); // XML文件路径
String xmlString = "<?xml version=\"1.0\"?>\n" +
"<class>\n" +
" <student rollno=\"393\">\n" +
" <firstname>Doe</firstname>\n" +
" <lastname>John</lastname>\n" +
" <nickname>DJ</nickname>\n" +
" <marks>85</marks>\n" +
" </student>\n" +
" <student rollno=\"493\">\n" +
" <firstname>Jane</firstname>\n" +
" <lastname>Doe</lastname>\n" +
" <nickname>JD</nickname>\n" +
" <marks>95</marks>\n" +
" </student>\n" +
"</class>";
DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();
// Document doc = dBuilder.parse(inputFile);
InputSource is = new InputSource(new StringReader(xmlString));
Document doc = dBuilder.parse(is);
doc.getDocumentElement().normalize();
System.out.println("Root element: " + doc.getDocumentElement().getNodeName());
traverseNodes(doc.getDocumentElement(), 0); // 从根节点开始遍历
} catch (Exception e) {
e.printStackTrace();
}
}
public static void traverseNodes(Node node, int level) {
// 打印节点的属性
if (node.hasAttributes()) {
NamedNodeMap attributes = node.getAttributes();
for (int i = 0; i < attributes.getLength(); i++) {
Node attr = attributes.item(i);
System.out.println(repeatString(" ", level * 2) + "Attribute: " + attr.getNodeName() + " = " + attr.getNodeValue());
}
}
// 打印节点的内容(如果有内容且不是只有空白字符)
String content = node.getTextContent().trim();
if (!content.isEmpty() && node.getChildNodes().getLength() == 1) {
System.out.println(repeatString(" ", level * 2) + "Content: " + content);
}
// 递归遍历子节点
NodeList nodeList = node.getChildNodes();
for (int i = 0; i < nodeList.getLength(); i++) {
Node currentNode = nodeList.item(i);
if (currentNode.getNodeType() == Node.ELEMENT_NODE) {
System.out.println(repeatString(" ", level * 2) + "Node Name: " + currentNode.getNodeName());
traverseNodes(currentNode, level + 1);
}
}
}
public static String repeatString(String str, int count) {
StringBuilder sb = new StringBuilder();
for (int i = 0; i < count; i++) {
sb.append(str);
}
return sb.toString();
}
}