簡體   English   中英

從Java中的XMl文件讀取

[英]reading from XMl file in java

我有一個簡單的XML文件

<requirements>
    <requirement>
        <name> SwitchON</name>
        <id>1</id>
        <text>The Light shall turn on when the Switch is on.</text>
    </requirement>
    <requirement>
        <name>SwitchOFF</name>
        <id>2</id>
        <text>The Light shall turn off when the Switch is off.</text>
    </requirement>
    <requirement>
        <name>Lightbulb</name>
        <id>3</id>
        <text>The Light bulb shall be connected </text>
    </requirement>
    <requirement>
        <name>Power</name>
        <id>4</id>
        <text>The Light shall have the power supply</text>
    </requirement>
</requirements>

我試圖在表模型中顯示此文件中的信息。 我有一個方法(readFromXMl),它讀取XML文件並返回表模型。

public static RequirementTable readFromXMl(String fileName) {
        RequirementTable T = new RequirementTable();
        Requirement R = new Requirement();

        try {

            DocumentBuilderFactory docBuilderFactory = DocumentBuilderFactory.newInstance();
            DocumentBuilder docBuilder = docBuilderFactory.newDocumentBuilder();
            Document doc = docBuilder.parse(new File(fileName));
            doc.getDocumentElement().normalize();
            NodeList listOfRequirements = doc.getElementsByTagName("requirement");

            int test = listOfRequirements.getLength();
            System.out.println("Total no of people : " + test);


            for (int i = 0; i < listOfRequirements.getLength(); i++) {
                   Node RequirementNode = listOfRequirements.item(i);
                if (RequirementNode.getNodeType() == Node.ELEMENT_NODE) {
                    Element RequirementElement = (Element) RequirementNode;



                    NodeList IdList = RequirementElement.getElementsByTagName("id");
                    Element IdElement = (Element) IdList.item(0);
                    NodeList textIdList = IdElement.getChildNodes();
                    R.setId(Integer.parseInt(textIdList.item(0).getNodeValue()));

                    NodeList DescriptionList = RequirementElement.getElementsByTagName("text");
                    Element DescriptionElement = (Element) DescriptionList.item(0);
                    NodeList textDescriptionList = DescriptionElement.getChildNodes();
                    R.setText(textDescriptionList.item(0).toString());

                    NodeList NameList = RequirementElement.getElementsByTagName("name");
                    Element NameElement = (Element) NameList;
                    NodeList textNameList = NameElement.getChildNodes();



                    if (textNameList.item(0).toString().equals("SwitchON")) {
                        T.addRequirement((SwitchOnReq)R);
                    } else if (textNameList.item(0).toString().equals("SwitchOFF")) {
                        T.addRequirement((SwitchOFFReq)R);
                    } else if (textNameList.item(0).toString().equals("LightBulb")) {
                        T.addRequirement((BulbRequirement)R);
                    } else if (textNameList.item(0).toString().equals("Power")) {
                        T.addRequirement((PowerRequirement)R);
                    }
}
}
} catch (SAXParseException err) {
            System.out.println("** Parsing error" + ", line " + err.getLineNumber() + ", uri " + err.getSystemId());
            System.out.println(" " + err.getMessage());

        } catch (SAXException e) {
            Exception x = e.getException();
            ((x == null) ? e : x).printStackTrace();

        } catch (Throwable t) {
            t.printStackTrace();
        }
        return T;

    }

但是,在這一行中,我收到一個錯誤,指出指針為空Element IdElement = (Element) IdList.item(0); IdElement為空!

讓我建議一些輔助方法,而不是所有循環和其他xml丑陋的方法:

private static String getNodeValue(Node n, String path)
        throws XPathExpressionException {
    XPath xpath = XPathFactory.newInstance().newXPath();
    return (String) xpath.evaluate(path, n, XPathConstants.STRING);
}

像這樣使用:

for (int i = 0; i < listOfRequirements.getLength(); i++) {
Node RequirementNode = listOfRequirements.item(i);
System.out.println("name:" + getNodeValue(RequirementNode, "name"));
System.out.println("id:" + getNodeValue(RequirementNode, "id"));
System.out.println("text:" + getNodeValue(RequirementNode, "text"));

...

獲取所有值並設置您的要求。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM