【问题标题】:How should I handle URLs inside XML?我应该如何处理 XML 中的 URL?
【发布时间】:2009-02-02 20:55:16
【问题描述】:

我正在创建一个 XML 文档,我想将 URL 存储在一个节点内,如下所示:

<ns:url>http://example.com</ns:ulr>

我的问题是,我是否需要对 URL 进行编码/转义?

如果我这样做了,.Net XmlDocument 对象会为我处理这个吗?

【问题讨论】:

    标签: .net xml url


    【解决方案1】:

    一般来说,大多数 DOM 实现(包括 XmlDocument)应该默认处理任何必要的文本内容转义。

    【讨论】:

    • 没错。通过 DOM 或 XmlWriters 之一创建您的文档,您会没事的。
    【解决方案2】:

    DOM/XmlWriter/无论你使用什么都应该为你处理。一个小问题:您可能会发现使用 XDocument 更容易(如果您有 3.5) - 命名空间的使用要简单得多(IMO):

    XNamespace ns = "http://consoso/foobar";
    XDocument doc = new XDocument(
         new XElement("Foo",
             new XAttribute(XNamespace.Xmlns + "ns", ns), // alias
             new XElement("Bar", "abc"),
             new XElement(ns + "url", "http://foo/bar")
         )
     );
     string s = doc.ToString();
    

    创建:

    <Foo xmlns:ns="http://consoso/foobar">
      <Bar>abc</Bar>
      <ns:url>http://foo/bar</ns:url>
    </Foo>
    

    【讨论】:

    • 谢谢,XDocument 简单多了。直到现在我才知道。
    【解决方案3】:

    我怀疑总体上是否需要逃避它。但是,您可能有一些应用程序级别的要求来执行此操作。

    您应该绝对将 URL 编码为 XML 文本(例如,它不应包含 &gt;)。

    澄清:这并不意味着您应该将编码文本传递给 DOM 实现。我知道的所有 XML API 都可以为您做到这一点;因此,对于所有实际情况,您都不需要手动操作。我只是说应该完成

    【讨论】:

    • 如果你这样做,你只会增加复杂性。将 DOM 转换为文本文件以处理转义是任何事情的责任。顺便说一句,文本内容中没有真正需要转义“>”,因为它没有引入标签。
    • 我认为这是对有效 XML 文档的要求。我并没有说你应该手动。无论如何,你都应该这样做。
    • 是的,这就是为什么每个 DOM XML 实现都会为你做这件事的原因。唯一应该通过直接字符串操作生成 XML 的人是 编写 DOM XML 实现的人。
    • @Robert:我同意,但它已经“完成”了。是的。我永远不会在应用程序中写这样的东西。我会使用 XElement。但无论我使用什么最终都会做到这一点,所以必须这样做。这就是我所说的,仅此而已。我从来没有说过,您应该手动对其进行编码并将其提供给您的 DOM 对象。
    猜你喜欢
    • 2015-02-12
    • 2016-09-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多