Đọc file XML phân biệt số tag class con vào mảng

<?xml version="1.0" encoding="UTF-8"?>
<DoDienTu>
	<DT ma="DeskTop1" ten="MÁY TÍNH ĐỂ BÀN DELL 3268" gia="10190000"></DT>
	
	<DT ma="LapTop1" ten="LAPTOP ASUS ROG STRIX GL503VD" gia="25990000" kg="2.3" pin="4" ></DT>
	
	<DT ma="Laptop2" ten="MACBOOK PRO 13 INCH 2017" gia="48990000" kg="1.37" pin="15"></DT>
	
	<DT ma="SmartPhone1" ten="IPHONE X 256GB GRAY" gia="32790000" kg="0.89" pin="10" cao="1125" rong="2436"></DT>
	
	<DT ma="Desktop2" ten="X3650 M5 - 8871-G2A" gia="109000000"></DT>
	
	<DT ma="SmartPhone2" ten="MOBIISTAR B221 ĐEN VÀNG" gia="220000" kg="0.08" pin="36" cao="128 " rong="160"></DT>
	
	<DT ma="DeskTop3" ten="MÁY TÍNH ĐỂ BÀN HP PAVILION 570-P080D" gia="7690000"></DT>
</DoDienTu>

mình có file như này đọc file vào array nhưng lại ko biết làm sao để nó gọi đúng new classcon cần gọi mình có 3 class con có cách nào đếm tagname ko nhỉ ?

Bạn dùng gì để parse XML ? DOM API, SAX hay StAX ?
Nếu DOM API thì chỉ cần doc.getElementsByTagName(tag_name).getLength() thôi

  • doc là document của bạn (class là Document)
  • getElementsByTagName trả về 1 NodeList chứa các Node có tag name theo yêu cầu
  • getLength() trả về size của NodeList trên
3 Likes

dùng tinyxml dễ parse nhưng k biết có cho java không, trước mình dùng cho c/c++

try {
			DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
			DocumentBuilder builder = factory.newDocumentBuilder();

			File file = new File("C:\\Users\\DELL\\Desktop\\C và C++ và Java\\TuanCuoi\\DocFile\\src\\TT\\NewFile.xml");
			Document doc = builder.parse(file);

			Element sv = doc.getDocumentElement();
			// truyền cây (root) vào sv (Element vì 1 thẻ = element)
			// KDL Element cho phép thao tác với thẻ đó

			System.out.println(sv.getAttribute("ma"));
			System.out.println(sv.getAttribute("ten"));
			
			
			
			
			NodeList listmh = sv.getElementsByTagName("mh"); // từ root trỏ đến các child gần nhất (bắt buộc)
			

			for (int i = 0; i < listmh.getLength(); i++) {
				Node nodemh = listmh.item(i);
				if (nodemh.getNodeType() == Node.ELEMENT_NODE) {
					Element mh = (Element) nodemh;
					System.out.print(mh.getAttribute("ma") + " ");
					System.out.print(mh.getAttribute("ten") + " ");
					System.out.print(Double.parseDouble(mh.getElementsByTagName("qt").item(0).getTextContent()) + " ");
					System.out.print(Double.parseDouble(mh.getElementsByTagName("ck").item(0).getTextContent()) + " \n");
				}
			}

		} catch (Exception e) {
			e.printStackTrace();
		}

à quên đếm thuộc tính chứ ko phải tagname file đọc cũ lấy ra test tag sv có 2 thuộc tính nhé

83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?