Читать значение из файла XML - PullRequest
0 голосов
/ 02 января 2019

Я знаю, как читать простой XML-файл в Java, используя getelementbyTag, но здесь я хочу прочитать MAC-адрес отсюда, который является 01-0C-CD-01-00-34 в Java.

Я пытаюсь использовать getElementsByTagName(""), но какой параметр я должен передать, чтобы получить элемент с type="MAC-Address"?

<Address>
    <P type="MAC-Address"xsi:type="tP_MACAddress">010C-CD-01-00-34</P>
    <P type="VLAN-ID" xsi:type="tP_VLAN-ID">000</P>
    <P type="VLAN-PRIORITY" xsi:type="tP_VLAN-PRIORITY">4</P>
    <P type="APPID" xsi:type="tP_APPID">0001</P>
</Address>

Мой текущий код:

public static void main(String argv[]) {
    try {
        File fXmlFile = new File("C:\\Users\\User\\Desktop\\Temp\\ReadXml\\staff.xml");
        DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
        DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();
        Document doc = dBuilder.parse(fXmlFile);

        doc.getDocumentElement().normalize();

        NodeList nList = doc.getElementsByTagName("Address");

        for (int temp = 0; temp < nList.getLength(); temp++) {
            Node nNode = nList.item(temp);

            if (nNode.getNodeType() == Node.ELEMENT_NODE) {
                Element eElement = (Element) nNode;
                System.out.println("MAC: " + eElement.getElementsByTagName("").item(0).getTextContent());
            }
        }
    } catch (Exception e) {
        e.printStackTrace();
    }
}

1 Ответ

0 голосов
/ 02 января 2019

Вы можете использовать xpath для поиска определенных частей XML-документа

        File fXmlFile = new File("C:\\Users\\User\\Desktop\\Temp\\ReadXml\\staff.xml");
        DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
        DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();
        Document doc = dBuilder.parse(fXmlFile);

        // Create XPathExpression
        XPathFactory xpathFactory = XPathFactory.newInstance();
        XPath xpath = xpathFactory.newXPath();
        XPathExpression expr =
                xpath.compile("/Address/P[@type='MAC-Address']/text()");
        // evaluate the Xpath and return result as a string.
        String mac = (String) expr.evaluate(doc, XPathConstants.STRING);

        System.out.println("MAC: " + mac);

Все классы Xpath относятся к пакету java.xml.xpath

import javax.xml.xpath.XPath;
import javax.xml.xpath.XPathConstants;
import javax.xml.xpath.XPathExpression;
import javax.xml.xpath.XPathFactory;

Если вы хотите перемещаться по узлам, вы можете. Вам не нужно нормализовать документ, но вам нужно использовать элемент документа, а не просто документ, когда вы ищете узлы. Вы можете получить все теги «P» и найти MAC-адрес. Что-то вроде:

        NodeList nList = doc.getDocumentElement().getElementsByTagName("P");

        for (int temp = 0; temp < nList.getLength(); temp++) {
            Node nNode = nList.item(temp);

            if (nNode.getNodeType() == Node.ELEMENT_NODE) {
                Element eElement = (Element) nNode;
                if ("MAC-Address".equals(eElement.getAttribute("type"))) {
                    System.out.println("MAC: " + eElement.getTextContent());
                }
            }
        }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...