【问题标题】:How to parse specific information from a XML-file into objects in java?如何将 XML 文件中的特定信息解析为 java 中的对象?
【发布时间】:2020-02-07 07:54:28
【问题描述】:

我对编程很陌生,尤其是对 XML 解析很陌生,我目前在 java 中遇到 xml 解析的问题。我已经尝试了几种方法来从 xml 文件中获取特定信息并将其写入一个对象,稍后将其放入一个数组列表中并进行排序。这是我的 XML 文件的捷径(我更改了名称和值,因为我不确定是否允许共享它。):

    <things>
      <code V="123"/>
      <region V="38"/>
      <hl_list>
        <hl>
          <stuff_hmv V="XXX" DN="some other stuff"/>
          <secondary_code V="Z98"/>
          <infotext V="max 12 units"/>
          <kl_list>
            <kl V="I" DN="some other stuff">
              <diag_list>
                <diag V="WS1" DN="illness 1"/>
                <diag V="WS2" DN="illness 2"/>
                <diag V="EX1" DN="illness 3"/>

              </diag_list>
            </kl>
          </kl_list>
        </hl>
      </hl_list>
    </things>
    <things>
      <code V="456"/>
      <region V="45"/>
      <hl_list>
        <hl>
          <stuff_hmv V="X1X" DN="some other stuff"/>
          <infotext V="max 13 units"/>
          <kl_list>
            <kl V="II" DN="some other stuff">
              <diag_list>
                <diag V="WS1" DN="illness 3"/>
                <diag V="WS2" DN="illness 2"/>
                <diag V="EX1" DN="illness 4"/>

              </diag_list>
            </kl>
          </kl_list>
        </hl>
      </hl_list>
    </things>

这基本上就是我正在使用的。我有几个“事物块”,我的对象中需要以下信息(如果存在)。如果对象已填充,则应将其放入 arraylist 并继续下一个块。 来自xml的信息:

  • 代码
  • 地区
  • stuff_hmv
  • secondary_code
  • 信息文本
  • 吉隆坡
  • 每个诊断条目(我试图将它们放入对象中的数组列表中)

到目前为止,我已经尝试使用 getElementsByTagName 和 getter/setter 获取我的对象的信息。

【问题讨论】:

    标签: java xml object dom arraylist


    【解决方案1】:

    JAXB 可能是您的解决方案

    @XmlRootElement
    public class Things {
      private String code;
      private String region;
    
      @XmlElement
      public void setCode(String code) {
        this.code = code;
      }
    
      @XmlElement
      public void setCode(String region) {
        this.region = region;
      }
    }
    
    
    JAXBContext jaxbContext = JAXBContext.newInstance(Things.class);
    Unmarshaller jaxbUnmarshaller = jaxbContext.createUnmarshaller();
    Customer customer = (Customer) jaxbUnmarshaller.unmarshal(new File("C:\\file.xml"));
    

    更多信息check jaxbhow to parse xml to java object?

    【讨论】:

      【解决方案2】:
      File fXmlFile = new File("/Users/mkyong/staff.xml");
      DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
      DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();
      Document doc = dBuilder.parse(fXmlFile);
      
      //optional, but recommended
      //read this - http://stackoverflow.com/questions/13786607/normalization-in-dom-parsing-with-java-how-does-it-work
      doc.getDocumentElement().normalize();
      
      System.out.println("Root element :" + doc.getDocumentElement().getNodeName());
      
      NodeList nList = doc.getElementsByTagName("staff");
      
      System.out.println("----------------------------");
      
      for (int temp = 0; temp < nList.getLength(); temp++) {
      
          Node nNode = nList.item(temp);
      
          System.out.println("\nCurrent Element :" + nNode.getNodeName());
      
          if (nNode.getNodeType() == Node.ELEMENT_NODE) {
      
              Element eElement = (Element) nNode;
      
              System.out.println("Staff id : " + eElement.getAttribute("id"));
              System.out.println("First Name : " + eElement.getElementsByTagName("firstname").item(0).getTextContent());
              System.out.println("Last Name : " + eElement.getElementsByTagName("lastname").item(0).getTextContent());
              System.out.println("Nick Name : " + eElement.getElementsByTagName("nickname").item(0).getTextContent());
              System.out.println("Salary : " + eElement.getElementsByTagName("salary").item(0).getTextContent());
      
          }
      }
      

      只需将员工标记标签替换为代码或您想要获取一个节点的东西

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-02-11
        • 2016-12-02
        • 1970-01-01
        • 2013-04-28
        • 1970-01-01
        • 2019-05-31
        • 2011-07-28
        相关资源
        最近更新 更多