Как разобрать заданную c информацию из XML -файла в объекты в java? - PullRequest
0 голосов
/ 07 февраля 2020

Я довольно новичок в программировании и особенно плохо знаком с парсингом XML, и в настоящее время у меня возникают проблемы с парсингом xml в java. Я пробовал несколько вещей, чтобы получить указанную c информацию из 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>

Это в основном то, что я делаю Я работаю с. У меня есть несколько «вещей-блоков», и мне нужна следующая информация (если она есть) в моих объектах. Если объект заполнен, его следует поместить в массив, и следующий блок продолжается. Информация из xml:

  • код
  • регион
  • stuff_hmv
  • вторичный_код
  • инфотекст
  • kl
  • каждая запись в diag (я пытался поместить их в массив в моем объекте)

до сих пор я пытался получить информацию с getElementsByTagName и getters / setters для моего объект.

Ответы [ 2 ]

1 голос
/ 07 февраля 2020

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"));

для получения дополнительной информации проверьте jaxb и как разобрать xml в java объект?

0 голосов
/ 07 февраля 2020
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());

    }
}

ПРОСТО ЗАМЕНИТЕ ПЕРЕКЛЮЧАТЕЛЬ ПЕРЕКЛЮЧЕНИЯ ПЕРСОНАЛА С КОДОМ ИЛИ ВЕЩАМИ, КОТОРЫЙ ОДНОМ ВЫ ХОТИТЕ ПОЛУЧИТЬ

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...