从URL保存(xml)文件的更好方法是什么?

时间:2013-05-13 18:42:57

标签: java url xml-parsing download

目前,这是我想要做的事情:

  • 将xml文件从网址
  • 保存到我的计算机
  • 解析它并获取我想要的信息(不是全部)
  • 将解析后的信息与昨天版本的xml
  • 进行比较

所以我可以做多个不同的事情,但我希望尽可能以最节省内存的方式做到这一点。我也不希望它永远解析和比较文件。

选项1:

  • 直接从网址解析xml并将其保存到数组
  • 遍历数组并创建一个新的xml文件,其中只包含我想要执行this之类的解析信息来创建新的xml文件。
  • 比较两个xml文件
  • 根据xml
  • 之间的差异编写新的xml文件

选项2:

  • 使用任何these建议的方法下载xml文件(这会保留xml结构吗?)
  • 将xml解析为数组
  • 比较两个xml文件
  • 写一个新的xml

这是我一直在研究的两个选项,但我知道还有更多。不确定它们是否更有效,但我几天没有用我的电脑直接访问互联网,所以我无法真正对它们进行测试。当我能够测试它一段时间后,我注意到需要一段时间才能直接从网站上解析信息。

xml结构如下所示:

<Data> 
    <User>
       <ID>1</ID>
       <Name>Bob</Name>
       <Age>18</Age>
       <IsOnline>false</IsOnline>
       <Sport>Basketball</Sport>
       <GymPresence>
           <LastSeen>April 12 2013</LastSeen>
           <Picture>www.gym.com/picId=10000</Picture>
           <Weights>
               <Machine>Bench</Machine>
               <Weight>175</Weight>
               <Reps>8</Reps>
           </Weights>
       </GymPresence>
    </User>
    <User>
       <ID>2</ID>
       <Name>Joe</Name>
       <Age>23</Age>
       <IsOnline>false</IsOnline>
       <Sport>Baseball</Sport>
       <GymPresence>
           <LastSeen>April 10 2013</LastSeen>
           <Picture>www.gym.com/picId=10001</Picture>
           <Weights>
               <Machine>Bench</Machine>
               <Weight>205</Weight>
               <Reps>8</Reps>
           </Weights>
       </GymPresence>
    </User>
    ...
    ... # 3 through 124
    ...
    <User>
       <ID>125</ID>
       <Name>Amy</Name>
       <Age>17</Age>
       <IsOnline>false</IsOnline>
       <Sport>Volleyball</Sport>
       <GymPresence>
           <LastSeen>April 13 2013</LastSeen>
           <Picture>www.gym.com/picId=10124</Picture>
           <Weights>
               <Machine>Bench</Machine>
               <Weight>105</Weight>
               <Reps>5</Reps>
           </Weights>
       </GymPresence>
    </User> 
</Data>

总的来说,我想知道解析,比较和编写xml文件的最佳选择是什么。

当我能够在线测试时,需要一段时间来解析xml而不保存它。当xml文件位于我的计算机上时,它的速度要快得多。但下载文件会保留xml格式吗?如果我以后需要它,是否值得保留xml不需要的信息?或者我是否需要解析它并将其写出来(这似乎需要更长的时间)才能保留格式?

1 个答案:

答案 0 :(得分:1)

在比较XML或JSON或任何其他序列化格式之类的内容时,您更关心的是数据而不是二进制内容。我的意思是

<Reps>8</Reps>

相当于

<Reps       >8</Reps>

我的建议是下载XML文件,使用像JAXB这样的库来解析和转换(关键字:unmarshal)文件的内容到Java对象(或列表/集)。对您以前的文件版本执行相同操作。然后比较java对象。使用集合,您可以计算两者之间的差异,从而创建仅包含差异的新文件(关键字:marshal)。