【问题标题】:Storing Equal Signs (=) in XML Documents在 XML 文档中存储等号 (=)
【发布时间】:2010-09-10 22:51:18
【问题描述】:

我遇到了一个 Google 还无法解决的问题!

我正在尝试将 URL 存储在 XML 文件中。问题是这些 URL 中包含等号 (=)。这会产生错误。

这是我的代码:(**token 是一个包含 URL 的变量)

Dim child As String = vbCrLf & "<Link URL='" & token & "'></Link>"
Dim fragment As XmlDocumentFragment = doc.CreateDocumentFragment
fragment.InnerXml = child

错误信息:(此处错误行和位置无意义)

'=' 是一个意外的标记。预期的标记是';'。第 2 行,位置 133。

我已将所有 '&' 符号替换为 '&amp' 以防它们是导致错误的原因,但到目前为止还没有运气。

【问题讨论】:

  • 为什么错误位置没有意义?

标签: asp.net xml vb.net xml-parsing


【解决方案1】:

您不应该使用字符串操作来创建 XML。如果您使用 .NET 的 XML API,它们会为您处理所有特殊字符。试试:

XmlElement linkElement = doc.CreateElement("Link");
XmlAttribute urlAttribute = doc.CreateAttribute("URL");
urlAttribute.Value = token;
linkElement.SetAttributeNode(urlAttribute);
fragment.AppendChild(linkElement);

【讨论】:

  • 我已经使用此代码创建文档。我上面显示的代码用于在现有 XML 文档中注入新元素。我确信有更好的方法。我只是通过代码来做我知道的事情,然后把我不知道的事情留到以后。不过感谢您的贡献:)
  • @Ansari:如果你已经知道如何使用 CreateElement 等,那你为什么要开始通过玩字符串来创建元素呢?
【解决方案2】:

您不应将&amp;amp; 替换为&amp;amp,而应将它们替换为&amp;amp;

或者更好的是,在您的片段中创建一个节点并为其添加一个属性。这样,对象将为您正确编码数据。

Dim fragment As XmlDocumentFragment = doc.CreateDocumentFragment()
Dim node As XmlElement = doc.CreateElement("Link")
Dim attr as XmlAttribute = doc.CreateAttribute("URL")
attr.Value = token
node.Attributes.Append(attr)
fragment.AppendNode(node)

【讨论】:

  • & 根本不应该被转义,它们不是 XML 输出的一部分,而是用于字符串连接。
  • @Bart van Heukelom:代码中的运算符当然不会被转义,因为它们绝不是字符串的一部分。我说的是token 字符串中的字符。
  • 你知道,我知道,但是从他的措辞来看,我感觉问题开始者确实用 &amp 代替了运算符。
【解决方案3】:

尝试在第一行下面添加这一行:

-- insert this line; should make the "=" sign safe for XML...
token = System.Web.HttpUtility.UrlEncode(token)

Dim child As String = vbCrLf & "<Link URL='" & token & "'></Link>"
Dim fragment As XmlDocumentFragment = doc.CreateDocumentFragment
fragment.InnerXml = child

【讨论】:

  • 这将编码整个元素,而不仅仅是属性值。它不再是 XML 元素的字符串表示形式。
  • 阅读时对“令牌”进行编码和解码就像一个魅力!谢谢老哥!
  • @John,去吧,-1 你想要的……这并不能改变他的问题已经解决的事实!!!此外,他并不是在寻找完整的代码重构。
  • @code4life:这是一个糟糕的做法,简单明了。不仅对于 OP,对于稍后阅读本文的其他人,他们需要知道不要这样做。此外,您可能已经解决了眼前的问题,但是当这段代码被复制粘贴到别处时,它可能会损坏,并且肯定会鼓励使用它的人养成不良习惯。
  • @John:“这是不好的做法,简单明了”。你能解释一下为什么吗?您还确定我们应该在这里采取这种教条主义的立场吗?顺便说一句,我认为你在这种情况下完全错了。解析 XML,我会尊重你的立场,但是构建或生成 XML,你不赞成字符串操作是不正确的。尝试使用所谓的“最佳实践方法”构建一个 50-100MB 的 XML,我敢说。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-05-12
  • 1970-01-01
  • 1970-01-01
  • 2010-10-20
  • 1970-01-01
  • 2017-09-02
相关资源
最近更新 更多