Как выборочно получить определенный дочерний элемент (дубликат), присутствующий в родительском элементе, с помощью синтаксического анализатора Stax xml? - PullRequest
0 голосов
/ 14 ноября 2018

У меня есть XML-файл, который я читаю с помощью Stax API.Он отлично работает для отдельных элементов <Branch> и <Currency>.Он также отлично работает для уникального дочернего элемента <AccountId>.Моя проблема заключается в том, что внутри родительских элементов <advisory>, <Fixed> и <Threat> существуют дублированные дочерние элементы, т.е. <name>.Как извлечь элемент <name> из родительского элемента <Fixed>

<Branch>XXXXX</Branch>
<Currency>XXXXXXX</Currency>
<Account>
   <accountID>XXXXXXXX</accountID>
</Account>
<Advisory> 
   <name>XXXXXXXXXX</name>
   <testDescription>XXXXXXXXXXXX</testDescription>
</Advisory> 
<Fixed>
   <name>XXXXXXXXXX</name>
   <root>XXXXXXXXXX</root>
</Fixed>
<Threat> 
   <name>XXXXXXXXXXX</name>
   <reference>XXXXXXXXXXXXXXXX</reference> 
</Threat>

Ниже приведен мой код для анализатора Stax: -

public static void parseXmlData(String xmlData) {
  String tagContent = null;
  XMLStreamReader reader = XMLInputFactory.newInstance()
      .createXMLStreamReader(new ByteArrayInputStream(xmlData.getBytes()));

  while (reader.hasNext()) {
    int event = reader.next();

    switch(event) {
      case XMLStreamConstants.START_ELEMENT:
          break;  
      case XMLStreamConstants.CHARACTERS:
          tagContent = reader.getText().trim();
          break;
      case XMLStreamConstants.END_ELEMENT:
          switch (reader.getLocalName()) {
          case "Branch":
              System.out.println(tagContent);
              break;
          case "Currency":
              System.out.println(tagContent);
              break;
          case "accountID":
              System.out.println(tagContent);
              break;
          case "name":
              System.out.println(tagContent);
              break;
          default:
              System.out.println("Discarded:",reader.getLocalName());
              break;
         }
         break;
    default:
         System.out.println("Discarded", event);
         break;
   }}}

Пожалуйста, предоставьте мне решение, как я могу использовать Stax Parser для выборочного извлечения данных из элемента <name>, присутствующего под родительским элементом <Fixed>

...