XML和Java轻松任务

XML和Java轻松任务,java,xml,Java,Xml,我是Java语言新手,我有一个项目要做。我的任务需要一些帮助,这并不难,但我真的不明白。我拥有这个XML文件 <LOCATION_PROPERTIES NAME="STN10"> <LOCATION ID="10" TYPE="P+D" X="52380" Y="24020" ANGLE="90" PICK_BANK="2" PICK_TABLE="10" PICK_MOD="0" PICK_DRV="N->P" DROP_BANK="2" DROP_TAB

我是Java语言新手,我有一个项目要做。我的任务需要一些帮助,这并不难,但我真的不明白。我拥有这个XML文件

<LOCATION_PROPERTIES NAME="STN10">
       <LOCATION ID="10" TYPE="P+D" X="52380" Y="24020" ANGLE="90" PICK_BANK="2" PICK_TABLE="10" PICK_MOD="0" PICK_DRV="N->P" DROP_BANK="2" DROP_TABLE="11" DROP_MOD="0" DROP_DRV="N->P"/>
   <SEGMENT_PROPERTIES>
       <NEXT_LOCATION NAME="X535" BANK="3" TABLE="127" MOD="0" DRV="P->P" INITIAL_SPEED="600" SPEED="504" LENGTH="8052" STOP="CS"/>
   </SEGMENT_PROPERTIES>
</LOCATION_PROPERTIES>

<LOCATION_PROPERTIES NAME="STN11">
      <LOCATION ID="11" TYPE="P+D" X="53280" Y="24020" ANGLE="90" PICK_BANK="2" PICK_TABLE="10" PICK_MOD="0" PICK_DRV="N->P" DROP_BANK="2" DROP_TABLE="11" DROP_MOD="0" DROP_DRV="N->P"/>
   <SEGMENT_PROPERTIES>
      <NEXT_LOCATION NAME="X535" BANK="3" TABLE="58" MOD="0" DRV="P->P" INITIAL_SPEED="600" SPEED="502" LENGTH="7893" STOP="CS"/>
   </SEGMENT_PROPERTIES>
</LOCATION_PROPERTIES>

<LOCATION_PROPERTIES NAME="STN12">
      <LOCATION ID="12" TYPE="P+D" X="54180" Y="24020" ANGLE="90" PICK_BANK="2" PICK_TABLE="10" PICK_MOD="0" PICK_DRV="N->P" DROP_BANK="2" DROP_TABLE="11" DROP_MOD="0" DROP_DRV="N->P"/>
   <SEGMENT_PROPERTIES>
      <NEXT_LOCATION NAME="X534" BANK="3" TABLE="59" MOD="0" DRV="P->P" INITIAL_SPEED="600" SPEED="600" LENGTH="4267" STOP="CS"/>
   </SEGMENT_PROPERTIES>
 </LOCATION_PROPERTIES>

 <LOCATION_PROPERTIES NAME="X535">
    <LOCATION ID="535" TYPE="MOVE" X="54090" Y="33800" ANGLE="90"/>
  <SEGMENT_PROPERTIES>
    <NEXT_LOCATION NAME="X536" BANK="1" TABLE="88" MOD="0" DRV="P->P" INITIAL_SPEED="1200" SPEED="1200" LENGTH="3013" STOP="CS"/>
    <NEXT_LOCATION NAME="STN19" BANK="2" TABLE="65" MOD="0" DRV="P->N" INITIAL_SPEED="1043" SPEED="468" LENGTH="5438" STOP="CS"/>
    <NEXT_LOCATION NAME="STN20" BANK="2" TABLE="66" MOD="0" DRV="P->N" INITIAL_SPEED="1200" SPEED="513" LENGTH="6338" STOP="CS"/>
    <NEXT_LOCATION NAME="STN22" BANK="2" TABLE="198" MOD="0" DRV="P->N" INITIAL_SPEED="1200" SPEED="587" LENGTH="8138" STOP="CS"/>
    <NEXT_LOCATION NAME="STN21" BANK="2" TABLE="67" MOD="0" DRV="P->N" INITIAL_SPEED="1200" SPEED="552" LENGTH="7238" STOP="CS"/>
   </SEGMENT_PROPERTIES>
 </LOCATION_PROPERTIES>

我成功地显示了所有的车站和到下一个地点的时间。它给了我:

出发站:STN10。 到达时间:X535---起飞时间:16秒

出发站:STN11 到达时间:X535---起飞时间:16秒

…//等等,很多

出发站:X535 到达时间:X536---出发时间:2秒 到达时间:STN19---出发时间:12秒 到达时间:STN20---到fo的时间:12秒 ... // 等

我需要做的是显示从一个站到另一个站的时间。这样说:

出发站:STN10 到达时间:X535---起飞时间:16秒 到达时间:X536---出发时间:2秒 到达时间:X537---。。。 到达时间:STN26---总时间:。。。 ... // 等

但现在我有点受困了,我想我必须以递归的方式来做,但我不知道如何继续

现在,这是我的java代码,但我认为需要创建更多的函数

public static int onestep4all()
{
    //int cpt = 0;
    int timeonestep = 0;
    List <Element> location_properties = root.getChildren("LOCATION_PROPERTIES");
    for (Element loc :  location_properties)
    {
        if(loc.getAttributeValue("NAME").startsWith("STN")== true)
        {
            System.out.println("-------------------------------------------------");
            System.out.println("            Departure Station : "+loc.getAttributeValue("NAME"));
            List <Element> segment_properties = loc.getChildren("SEGMENT_PROPERTIES");
            for (Element seg : segment_properties)
            {
                List <Element> next_location = seg.getChildren("NEXT_LOCATION");
                for (Element next: next_location)
                {
                    System.out.print("Arrival : " +next.getAttributeValue("NAME"));
                    int L = Integer.parseInt(next.getAttributeValue("LENGTH"));
                    int S = Integer.parseInt(next.getAttributeValue("SPEED"));
                    timeonestep = L/S;
                    System.out.println("  ---  Time to go : "+timeonestep+" seconds");                                
                }
            }
        }
    }
    return timeonestep;
}
public static int onestep4all()
{
//int-cpt=0;
int timeonestep=0;
List location_properties=root.getChildren(“location_properties”);
对于(元素位置:位置和属性)
{
if(loc.getAttributeValue(“NAME”).startsWith(“STN”)==true)
{
System.out.println(“-------------------------------------------------------------”;
System.out.println(“出发站:+loc.getAttributeValue(“名称”);
列出段_属性=loc.getChildren(“段_属性”);
用于(元素分段:分段属性)
{
列出下一个位置=seg.getChildren(“下一个位置”);
用于(元素下一个:下一个位置)
{
System.out.print(“到达:+next.getAttributeValue(“名称”);
intl=Integer.parseInt(next.getAttributeValue(“长度”);
ints=Integer.parseInt(next.getAttributeValue(“速度”);
timeonestep=L/S;
System.out.println(“--Time to go:+timeonestep+“seconds”);
}
}
}
}
返回时间一步;
}

谢谢大家的帮助。

请将所有代码和xml放入公共回购中,并提供链接。我无法在我的计算机上运行此代码。这是我的XML文件:[URL=-85 KB[/URL],但对于此代码,我只在我的计算机上进行了不同的测试。@Lexandro如果您想阅读它,请将其用作主代码:`public class JDOM2{private static final String xmlroutes=“C://Users//Thomas Desktop//Chalmers//routes.XML”;静态元素根;公共静态void main(字符串[]args)抛出JDOMException,IOException{SAXBuilder jdomBuilder=new SAXBuilder();文档jdomDocument=jdomBuilder.build(xmlroutes);根=jdomDocument.getRootElement();onestep4all()}“我无法下载XML,请将其发送到gmail.com上的lexandro2000。否则,我最终让代码运行:),这样我就可以在周末进行调查。我整理了一些东西并推送到GitHub:我不确定你到底想要什么,但如果你指定第一个站点,这个代码会创建一个站点列表。它有无限循环检测和d我只显示长度/时间,但我认为这是一个可用的起点。如果您有问题或要求,请告诉我:)