Хранение знаков равенства (=) в документах XML - PullRequest
2 голосов
/ 11 сентября 2010

Я столкнулся с проблемой, которую Google пока не может решить!

Я пытаюсь сохранить URL-адреса в файле XML.Проблема в том, что эти URL содержат в себе знаки равенства (=).И это приводит к ошибке.

Вот мой код: (** токен - это переменная, содержащая URL)

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

Сообщение об ошибке: (Строка и позиция ошибки здесь не имеют смысла)

'=' - неожиданный токен.Ожидаемый токен - «;».Строка 2, позиция 133.

Я заменил все символы '&' на '&', если они были причиной ошибки, но пока не повезло.

Ответы [ 3 ]

3 голосов
/ 11 сентября 2010

Никогда не используйте манипуляции со строками для создания XML.Если вы используете XML API .NET, они позаботятся обо всех специальных символах для вас.Попробуйте:

XmlElement linkElement = doc.CreateElement("Link");
XmlAttribute urlAttribute = doc.CreateAttribute("URL");
urlAttribute.Value = token;
linkElement.SetAttributeNode(urlAttribute);
fragment.AppendChild(linkElement);
1 голос
/ 11 сентября 2010

Вы не должны заменять & на &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)
0 голосов
/ 11 сентября 2010

Попробуйте добавить эту строку ниже первой строки:

-- 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...