Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/308.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
Java 从url保存(xml)文件的更好方法是什么?_Java_Url_Xml Parsing_Download - Fatal编程技术网

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

Java 从url保存(xml)文件的更好方法是什么?,java,url,xml-parsing,download,Java,Url,Xml Parsing,Download,目前,我想做的是: 从url将xml文件保存到我的计算机 解析它并获取我想要的信息(这不是全部) 将解析的信息与xml的早期版本进行比较 所以我可以做很多不同的事情,但我希望尽可能以最节省内存的方式来做。我也不想花很长时间来解析和比较文件 备选案文1: 直接从url解析xml并将其保存到数组中 遍历数组并创建一个新的xml文件,其中只包含我想要创建新xml文件的解析信息 比较这两个xml文件 根据xml之间的差异编写新的xml文件 备选案文2: 使用任何建议的方法下载xml文件(这会保

目前,我想做的是:

  • 从url将xml文件保存到我的计算机
  • 解析它并获取我想要的信息(这不是全部)
  • 将解析的信息与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>

1.
上下快速移动
18
假的
篮球
2013年4月12日
www.gym.com/picId=10000
长凳
175
8.
2.
乔
23
假的
棒球
2013年4月10日
www.gym.com/picId=10001
长凳
205
8.
...
... # 3至124
...
125
艾米
17
假的
排球
2013年4月13日
www.gym.com/picId=10124
长凳
105
5.
总的来说,我想知道解析、比较和编写xml文件的最佳选择是什么


当我能够在线测试它时,需要一段时间来解析xml而不保存它。当xml文件位于我的计算机上时,它运行得相当快。但是下载文件会保留xml格式吗?是否值得从xml中保留我不需要的信息,以备以后需要?或者我必须解析并写出它(这似乎需要更长的时间)以保持格式?

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

<Reps>8</Reps>
8
相当于

<Reps       >8</Reps>
8

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

无论您下载的是什么,它都归结为字节。如果您的url流提供的字节最终是正确的xml,那么这就是您将得到的结果(如果您从流中正确读取)。感谢您的建议。我该不该下载这个文件,这件事已经弄清楚了。如果我以后想在VIM或任何其他查看器中查看该文件,是否有方法下载具有正确格式/二进制内容的文件。我不知道是什么让你担心它不是正确的二进制内容。也许它只是在记事本上查看时奇怪地出现了。它在网站上看起来比记事本干净多了。我不太担心,这不是必要的。再次感谢!