Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/319.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将嵌套XML映射到Java变量_Java_Xml_Dom - Fatal编程技术网

将嵌套XML映射到Java变量

将嵌套XML映射到Java变量,java,xml,dom,Java,Xml,Dom,我有以下XML示例: <DiagnosticResult> <RESULTSHEADER> <VEHICLE> <IDENT> <REGISTRATION>car registration</REGISTRATION> <MANUFACTURER>car manuf</MANUFACTURER>

我有以下XML示例:

<DiagnosticResult>
   <RESULTSHEADER>
      <VEHICLE>
         <IDENT>
            <REGISTRATION>car registration</REGISTRATION>
            <MANUFACTURER>car manuf</MANUFACTURER>
            <MODEL>car model</MODEL>
         </IDENT>
         <DATA>
            <VEHICLE_IMAGE>veh url</VEHICLE_IMAGE>
         </DATA>
      </VEHICLE>
   </RESULTSHEADER>
   <RESULT OBJECT="WHEEL_ALIGNMENT" METHOD="MANUFACTURER_SPECIFIC">
      <SECTION OBJECT="TIRE_INSPECTION" AXLE="1">
         <TITLE>Tire Inspection Axle 1</TITLE>
         <MEAS OBJECT="TREAD_DEPTH_DISPLAY_1" LOC="LEFT">
            <TITLE>Tread Depth Point</TITLE>
            <VALUE UNIT="mm" RESULT="0">4.491</VALUE>
            <VALUE TYPE="DISP" UNIT="finch" LOWLIM1="2/32" LOWLIM2="4/32" RESULT="1">6/32</VALUE>
         </MEAS>
         <MEAS OBJECT="TREAD_DEPTH_DISPLAY_2" LOC="LEFT">
            <TITLE>Tread Depth Point</TITLE>
            <VALUE UNIT="mm" RESULT="0">5.871</VALUE>
            <VALUE TYPE="DISP" UNIT="finch" LOWLIM1="2/32" LOWLIM2="4/32" RESULT="1">7/32</VALUE>
         </MEAS>
         <MEAS OBJECT="TREAD_DEPTH_DISPLAY_3" LOC="LEFT">
            <TITLE>Tread Depth Point</TITLE>
            <VALUE UNIT="mm" RESULT="0">6.277</VALUE>
            <VALUE TYPE="DISP" UNIT="finch" LOWLIM1="2/32" LOWLIM2="4/32" RESULT="1">8/32</VALUE>
         </MEAS>
         <MEAS OBJECT="TREAD_DEPTH_DISPLAY_1" LOC="RIGHT">
            <TITLE>Tread Depth Point</TITLE>
            <VALUE UNIT="mm" RESULT="0">5.694</VALUE>
            <VALUE TYPE="DISP" UNIT="finch" LOWLIM1="2/32" LOWLIM2="4/32" RESULT="1">7/32</VALUE>
         </MEAS>
         <MEAS OBJECT="TREAD_DEPTH_DISPLAY_2" LOC="RIGHT">
            <TITLE>Tread Depth Point</TITLE>
            <VALUE UNIT="mm" RESULT="0">4.821</VALUE>
            <VALUE TYPE="DISP" UNIT="finch" LOWLIM1="2/32" LOWLIM2="4/32" RESULT="1">6/32</VALUE>
         </MEAS>
         <MEAS OBJECT="TREAD_DEPTH_DISPLAY_3" LOC="RIGHT">
            <TITLE>Tread Depth Point</TITLE>
            <VALUE UNIT="mm" RESULT="0">4.560</VALUE>
            <VALUE TYPE="DISP" UNIT="finch" LOWLIM1="2/32" LOWLIM2="4/32" RESULT="1">6/32</VALUE>
         </MEAS>
         <MEAS OBJECT="TREAD_DEPTH_DISPLAY_4" LOC="RIGHT">
            <TITLE>Tread Depth Point</TITLE>
            <VALUE UNIT="mm" RESULT="0">5.158</VALUE>
            <VALUE TYPE="DISP" UNIT="finch" LOWLIM1="2/32" LOWLIM2="4/32" RESULT="1">6/32</VALUE>
         </MEAS>
      </SECTION>
      <SECTION OBJECT="TIRE_INSPECTION" AXLE="2">
         <MEAS OBJECT="TREAD_DEPTH_DISPLAY_1" LOC="LEFT">
            <TITLE>Tread Depth Point</TITLE>
            <VALUE UNIT="mm" RESULT="0">5.199</VALUE>
            <VALUE TYPE="DISP" UNIT="finch" LOWLIM1="2/32" LOWLIM2="4/32" RESULT="1">7/32</VALUE>
         </MEAS>
         <MEAS OBJECT="TREAD_DEPTH_DISPLAY_2" LOC="LEFT">
            <TITLE>Tread Depth Point</TITLE>
            <VALUE UNIT="mm" RESULT="0">6.052</VALUE>
            <VALUE TYPE="DISP" UNIT="finch" LOWLIM1="2/32" LOWLIM2="4/32" RESULT="1">8/32</VALUE>
         </MEAS>
         <MEAS OBJECT="TREAD_DEPTH_DISPLAY_3" LOC="LEFT">
            <TITLE>Tread Depth Point</TITLE>
            <VALUE UNIT="mm" RESULT="0">6.275</VALUE>
            <VALUE TYPE="DISP" UNIT="finch" LOWLIM1="2/32" LOWLIM2="4/32" RESULT="1">8/32</VALUE>
         </MEAS>
         <MEAS OBJECT="TREAD_DEPTH_DISPLAY_1" LOC="RIGHT">
            <TITLE>Tread Depth Point</TITLE>
            <VALUE UNIT="mm" RESULT="0">5.270</VALUE>
            <VALUE TYPE="DISP" UNIT="finch" LOWLIM1="2/32" LOWLIM2="4/32" RESULT="1">7/32</VALUE>
         </MEAS>
         <MEAS OBJECT="TREAD_DEPTH_DISPLAY_2" LOC="RIGHT">
            <TITLE>Tread Depth Point</TITLE>
            <VALUE UNIT="mm" RESULT="0">5.249</VALUE>
            <VALUE TYPE="DISP" UNIT="finch" LOWLIM1="2/32" LOWLIM2="4/32" RESULT="1">7/32</VALUE>
         </MEAS>
         <MEAS OBJECT="TREAD_DEPTH_DISPLAY_3" LOC="RIGHT">
            <TITLE>Tread Depth Point</TITLE>
            <VALUE UNIT="mm" RESULT="0">5.685</VALUE>
            <VALUE TYPE="DISP" UNIT="finch" LOWLIM1="2/32" LOWLIM2="4/32" RESULT="1">7/32</VALUE>
         </MEAS>
      </SECTION>
      <SUMMARY>
         <TITLE>Quick Check Results</TITLE>
         <MEAS OBJECT="TIRE_CHECK">
            <TITLE>Tread Depth</TITLE>
            <VALUE RESULT="1">PASSED</VALUE>
         </MEAS>
      </SUMMARY>
   </RESULT>
</DiagnosticResult>
我遇到的问题是如何访问具有相同名称的字段。举一个例子:

 <MEAS OBJECT="TREAD_DEPTH_DISPLAY_1" LOC="LEFT">
    <TITLE>Tread Depth Point</TITLE>
    <VALUE UNIT="mm" RESULT="0">4.491</VALUE>
    <VALUE TYPE="DISP" UNIT="finch" LOWLIM1="2/32" LOWLIM2="4/32" RESULT="1">6/32</VALUE>
 </MEAS>
这负责查找元素,但会覆盖变量。 输出应为:

1/32
2/32
3/32
4/32
5/32
6/32
7/32
8/32
但现在是:

5/32
6/32
7/32
8/32
5/32
6/32
7/32
8/32

尝试以下解决方案

public static void main(String[] args) {

  try {
     File inputFile = new File("Input.xml");
     DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
     DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();
     Document document = dBuilder.parse(inputFile);
     document.getDocumentElement().normalize();
     NodeList nodeList = document.getElementsByTagName("MEAS");

     for (int i = 0; i < nodeList.getLength(); i++) {
         Element element = (Element) nodeList.item(i);
         Node node = nodeList.item(i);
         if(element.getAttribute("OBJECT").equals("TREAD_DEPTH_DISPLAY_1")){
             NodeList childNodeList = element.getElementsByTagName("VALUE");
             for (int j = 0; j < childNodeList.getLength(); j++) {
                 Element childElement = (Element) childNodeList.item(j);
                 if(j==0){
                     System.out.println("First Value Element");
                     System.out.println("UNIT : "+childElement.getAttribute("UNIT")+
                             ", RESULT : "+childElement.getAttribute("RESULT")+
                             ", VALUE : "+childElement.getTextContent());
                 }else{
                     System.out.println("Second Value Element");
                     System.out.println("TYPE : "+childElement.getAttribute("TYPE")+
                             " UNIT : "+childElement.getAttribute("UNIT")+
                             " LOWLIM1 : "+childElement.getAttribute("LOWLIM1")+
                             " LOWLIM2 : "+childElement.getAttribute("LOWLIM2")+
                             ", RESULT : "+childElement.getAttribute("RESULT")+
                             ", VALUE : "+childElement.getTextContent());
                 }
            }
         }
     }
  } catch (Exception e) {
     e.printStackTrace();
  }
}

谢谢你的详细回答。我用过它,它很管用。我有一个快速跟进的问题。我编辑了我的原始问题。如果它对您有效,请接受答案:)。谢谢
5/32
6/32
7/32
8/32
5/32
6/32
7/32
8/32
public static void main(String[] args) {

  try {
     File inputFile = new File("Input.xml");
     DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
     DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();
     Document document = dBuilder.parse(inputFile);
     document.getDocumentElement().normalize();
     NodeList nodeList = document.getElementsByTagName("MEAS");

     for (int i = 0; i < nodeList.getLength(); i++) {
         Element element = (Element) nodeList.item(i);
         Node node = nodeList.item(i);
         if(element.getAttribute("OBJECT").equals("TREAD_DEPTH_DISPLAY_1")){
             NodeList childNodeList = element.getElementsByTagName("VALUE");
             for (int j = 0; j < childNodeList.getLength(); j++) {
                 Element childElement = (Element) childNodeList.item(j);
                 if(j==0){
                     System.out.println("First Value Element");
                     System.out.println("UNIT : "+childElement.getAttribute("UNIT")+
                             ", RESULT : "+childElement.getAttribute("RESULT")+
                             ", VALUE : "+childElement.getTextContent());
                 }else{
                     System.out.println("Second Value Element");
                     System.out.println("TYPE : "+childElement.getAttribute("TYPE")+
                             " UNIT : "+childElement.getAttribute("UNIT")+
                             " LOWLIM1 : "+childElement.getAttribute("LOWLIM1")+
                             " LOWLIM2 : "+childElement.getAttribute("LOWLIM2")+
                             ", RESULT : "+childElement.getAttribute("RESULT")+
                             ", VALUE : "+childElement.getTextContent());
                 }
            }
         }
     }
  } catch (Exception e) {
     e.printStackTrace();
  }
}
First Value Element
UNIT : mm, RESULT : 0, VALUE : 4.491
Second Value Element
TYPE : DISP UNIT : finch LOWLIM1 : 2/32 LOWLIM2 : 4/32, RESULT : 1, VALUE : 6/32
First Value Element
UNIT : mm, RESULT : 0, VALUE : 5.694
Second Value Element
TYPE : DISP UNIT : finch LOWLIM1 : 2/32 LOWLIM2 : 4/32, RESULT : 1, VALUE : 7/32
First Value Element
UNIT : mm, RESULT : 0, VALUE : 5.199
Second Value Element
TYPE : DISP UNIT : finch LOWLIM1 : 2/32 LOWLIM2 : 4/32, RESULT : 1, VALUE : 7/32
First Value Element
UNIT : mm, RESULT : 0, VALUE : 5.270
Second Value Element
TYPE : DISP UNIT : finch LOWLIM1 : 2/32 LOWLIM2 : 4/32, RESULT : 1, VALUE : 7/32