Символ ':', шестнадцатеричное значение 0x3A, не может быть включен в имя
У меня есть xml файл, содержащий его элемент вроде
<ab:test>Str</ab:test>
Когда я пытаюсь получить к нему доступ с помощью кода:
XElement tempElement = doc.Descendants(XName.Get("ab:test")).FirstOrDefault();
Это дает мне эту ошибку:
System.Web.Services.Protocols.SoapException: сервер не смог обработать запрос. --- > System.Xml.XmlException: символ ':', шестнадцатеричное значение 0x3A, не может быть включен в имя.
Как мне получить доступ к нему?
Ответы
Ответ 1
Если вы хотите использовать пространства имен, LINQ to XML делает это очень просто:
XNamespace ab = "http://whatever-the-url-is";
XElement tempElement = doc.Descendants(ab + "test").FirstOrDefault();
Найдите раздел xmlns:ab=...
в вашем документе, чтобы узнать, к какому URI пространства имен относится к.
Ответ 2
Попробуйте помещать пространство имен в {
... }
так:
string xfaNamespace = "{http://www.xfa.org/schema/xfa-template/2.6/}";
Ответ 3
У меня была такая же ошибка. Я обнаружил, что добавляю код...
var ab = "http://whatever-the-url-is";
... но ab определено как строка. Это вызвало ошибку, сообщенную OP. Вместо использования ключевого слова VAR я использовал фактический тип данных XNamespace...
XNamespace ab = "http://whatever-the-url-is";
... и проблема исчезла.
Ответ 4
Существует перегрузка метода Get, который вы, возможно, захотите попробовать, который учитывает пространство имен. Попробуйте следующее:
XElement tempElement = doc.Descendants(XName.Get("test", "ab")).FirstOrDefault();
Ответ 5
Попробуйте получить пространство имен из документа
var ns = doc.Root.Name.Namespace;