4

我将大量 URL(大约 100,000 个)存储在 XML 文件中(以及其他一些数据)。它在 URL 较少的情况下工作得很好,但是现在,XML 文件变得非常大(因为标签和缩进)并且解析速度很慢。所以我考虑将所有 URL 分组到一个 XML 元素中,为此我需要一个分隔符。作为一个例子,我想从这个开始:

<document>
  <bigGroupOfURLs>
    <OneURL>
      <nameOfData1>data1_1</nameOfData1>
      <nameOfData2>data1_2</nameOfData2>
      <URL>www.site1.com</URL>
    </OneURL>
    <OneURL>
      <nameOfData1>data2_1</nameOfData1>
      <nameOfData2>data2_2</nameOfData2>
      <URL>www.site2.com</URL>
    </OneURL>
  </bigGroupOfURLs>
  <someOtherData>...</someOtherData>
</document>

对于这样的事情(但不使用#):

<document>
  <bigGroupOfURLs>
    data1#data2#www.site1.com#data1#data2#www.site2.com
  </bigGroupOfURLs>
  <someOtherData>...</someOtherData>
</document>

这些 URL 将来自 HTML 文件中的标签,因此它们可以带有各种非标准字符。例如,以下是可能包含的示例:

<a href="http://ja.wikipedia.org/wiki/メインページ">メインページ</a>
<a href="http://en.wikipedia.org/wiki/Stack Overflow">Stack Overflow</a>

在那里,我们可以看到 UTF-8 字符和一个空格。这些 URL 被正确解释,我想在它们出现时存储它们。那么,保证哪个字符永远不会出现在 URL 中呢?我希望它是一个可打印的字符。请注意,这将在 XML 文件中,因此我可能不应该使用字符</>.

4

2 回答 2

3

“URL”的定义不止一种。经常在“URI”或“IRI”更正确的地方使用该术语。许多系统试图放任自流,并允许根据规范在技术上不合法的事情;波斯特定律在这里适用,其不可避免的后果是,如果某些系统开始对他们接受的内容持开放态度,那么其他所有人都必须效仿。

一个非常安全的分隔符是一个空格,特别是如果您注意确保 URL 中的任何空格都正确地 % 编码为 %20。

但在使用这样的微语法之前,我想确信 XML 解析时间确实是瓶颈。

于 2013-10-08T22:27:41.673 回答
2

您提到的两个网址实际上都是无效的:

http://ja.wikipedia.org/wiki/メインページ
http://en.wikipedia.org/wiki/Stack Overflow

如果您在浏览器中键入它们,它们将在发送到服务器之前进行百分比编码。根据RFC 3986,空格字符和以下可打印的 ASCII 字符在 URL 中是无效的:

" < > \ ^ ` { | }

多字节 UTF-8 序列也是无效的。也就是说,一些服务器可能仍然接受这些字符。

所以我建议你规范化你的 URL并用空格分隔它们。

于 2013-10-08T20:08:59.700 回答