0

目前,这是我想要做的:

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

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

选项1:

  • 直接从url解析xml并保存到数组中
  • 遍历数组并创建一个新的 xml 文件,其中只包含我想要做这样的事情来创建新的 xml 文件的解析信息
  • 比较两个xml文件
  • 根据xml之间的差异编写新的xml文件

选项 2:

  • 使用任何这些建议的方法下载 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 中保留我不需要的信息,以防我以后需要它?还是我必须解析它并将其写出来(这似乎需要更长的时间)以保持格式?

4

1 回答 1

1

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

<Reps>8</Reps>

相当于

<Reps       >8</Reps>

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

于 2013-05-13T18:56:04.180 回答