有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java如何从XML节点获取数据?

我正在努力从下面的XML节点中获取数据。我使用DocumentBuilder来解析XML,通常通过定义节点来获得节点的值,但在这种情况下,我不确定节点会是什么样子

<Session.openRs status="success" sessionID="19217B84:AA3649FE:B211FF37:E61A78F1:7A35D91D:48E90C41" roleBasedSecurity="1" entityID="1" />

这就是我如何通过标记名获取其他标记的值

public List<NYProgramTO> getNYPPAData() throws Exception {
    this.getConfiguration();
    List<NYProgramTO> to = dao.getLatestNYData();
    DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
    Document document = null;

    // Returns chunkSize
    /*List<NYProgramTO> myList = getNextChunk(to);
    ExecutorService executor = Executors.newFixedThreadPool(myList.size());
    myList.stream().parallel()
    .forEach((NYProgramTO nyTo) -> 
    {
        executor.execute(new NYExecutorThread(nyTo, migrationConfig , appContext, dao));
    });

    executor.shutdown();
    executor.awaitTermination(300, TimeUnit.SECONDS);
    System.gc();*/

    try {
        DocumentBuilder builder = factory.newDocumentBuilder();
        InputSource source = new InputSource();

        for(NYProgramTO nyProgram: to) {
            String reqXML = nyProgram.getRequestXML();
            String response = RatingRequestProcessor.postRequestToDC(reqXML, URL);
    //      dao.storeData(nyProgram);
            System.out.println(response);
            if(response != null) {
                source.setCharacterStream(new StringReader(response));
                document = builder.parse(source);

                NodeList list = document.getElementsByTagName(NYPG3Constants.SERVER);
                for(int iterate = 0; iterate < list.getLength(); iterate++){
                    Node node = list.item(iterate);

                    if(node.getNodeType() == Node.ELEMENT_NODE) {
                        Element element = (Element) node;
                        nyProgram.setResponseXML(response);
                        nyProgram.setFirstName(element.getElementsByTagName(NYPG3Constants.F_NAME).item(0).getTextContent());
                        nyProgram.setLastName(element.getElementsByTagName(NYPG3Constants.L_NAME).item(0).getTextContent());
                        nyProgram.setPolicyNumber(element.getElementsByTagName(NYPG3Constants.P_NUMBER).item(0).getTextContent());
                        nyProgram.setZipCode(element.getElementsByTagName(NYPG3Constants.Z_CODE).item(0).getTextContent());
                        nyProgram.setDateOfBirth(element.getElementsByTagName(NYPG3Constants.DOB).item(0).getTextContent());
                        nyProgram.setAgencyCode(element.getElementsByTagName(NYPG3Constants.AGENCY_CODE).item(0).getTextContent());
                        nyProgram.setLob(element.getElementsByTagName(NYPG3Constants.LINE_OF_BUSINESS).item(0).getTextContent());

                        if(element.getElementsByTagName(NYPG3Constants.SUBMISSION_NUMBER).item(0) != null){
                            nyProgram.setSubmissionNumber(element.getElementsByTagName(NYPG3Constants.SUBMISSION_NUMBER).item(0).getTextContent());
                        } else {
                            nyProgram.setSubmissionNumber("null");
                        }

我需要获取sessionId的值。我想知道的是节点,我肯定不可能。我通过标记名检索值,那么在这种情况下,标记名是什么

提前谢谢


共 (1) 个答案

  1. # 1 楼答案

    你应该考虑使用XPath。至少对我来说,它非常易于使用,对于您来说,为了获得sessionID,您可以尝试以下方法:

    XPath xPath = XPathFactory.newInstance().newXPath();
    String expression = "/Session.openRs/@sessionID";
    
    String sessionID = xPath.evaluate(expression,document);
    

    您可以获得如下“文档”:

    Document document  = builder.newDocumentBuilder();
    

    希望这能有所帮助