如何从JSON输出中获取相关信息?

时间:2019-03-29 12:50:35

标签: java json xml parsing

我正在尝试将XML文件解析为JSON。虽然我可以使用HashMap进行成功解析,但是我正在使用的XML文件包含许多不相关的信息,这些信息也反映在JSON中。

我的XML文件是一个拓扑文件,基本上是网络元素及其相应进程的拓扑。因此,它分为父节点和子节点。我寻求的大多数相关信息都位于父节点上,并且我想通过任何方式忽略子节点,以便在JSON中只有父节点可用。

这是我编写的要解析的代码。我试图编写代码来获取子节点enter code here,但我不知道如何删除它们(例如可以使用的条件):

static String nodeType1,nodeType;
    static String nodeName1,nodeName;
    static String nodeIP1,nodeIP;

    public static void main(String[] args) {

        try { File fXmlFile = new File("SystemTopology.txt");
          DocumentBuilderFactory dbFactory = 
          DocumentBuilderFactory.newInstance();
          DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();
          Document doc = dBuilder.parse(fXmlFile);

          doc.getDocumentElement().normalize();

          NodeList nList = doc.getElementsByTagName("SNOSNE") ;
          Map<String, Object> data = new HashMap<String, Object>();

          for (int temp = 0; temp < nList.getLength(); temp++) {
              Node nNode = nList.item(temp);

              Element el = (Element) nNode;

              nodeType = el.getAttribute("snostype");
              nodeName = el.getAttribute("cimname");
              nodeIP = el.getAttribute("snoshostip");

              NodeList list = el.getChildNodes();

          for (int i = 0; i < list.getLength(); i++) {
                  Node nNode1 = list.item(i);
           if(list.item(i).getNodeType() == Node.ELEMENT_NODE){
             Element element = (Element) list.item(i);
             nodeType1 = element.getAttribute("snostype");
             nodeName1 = element.getAttribute("cimname");
         nodeIP1 = element.getAttribute("snoshostip");
                if(!nodeIP1.isEmpty()) {
                      System.out.println(nodeType1);
                      System.out.println(nodeName1);
                      System.out.println(nodeIP1);
                        }
                  } 
              }
         //Need to add conditions here that would get only child nodes    
                  if(!nodeIP.isEmpty()) {
                      data.put(nodeName, nodeType+","+nodeIP);
                  }
          }
          JSONObject json = new JSONObject(data);
          System.out.printf( "JSON: %s", json.toString(2));
    }
        catch (Exception excp)
        {
          System.out.println("topology file not found " + excp.getMessage());
        }

拓扑文件如下:

    <SNOSNE cimname="EDA_01" snoshostip="1.1.1.1" snostype="EDA">
         <SNOSNE cimname="Resources" snoshostip="1.1.1.1" snostype="EDA">
         </SNOSNE>
         <SNOSNE cimname="CPU" snoshostip="1.1.1.1" snostype="EDA">
         </SNOSNE>
    ...
    ...
    ...
    </SNOSNE>

预期的输出只需要包含cimname =“ EDA_01”的父项。而且所有子节点都需要在JSON输出中忽略。

0 个答案:

没有答案