Символ ':', шестнадцатеричное значение 0x3A, не может быть включен в имя - PullRequest
71 голосов
/ 04 апреля 2010

У меня есть XML-файл, который содержит такой элемент, как

<ab:test>Str</ab:test>  

Когда я пытаюсь получить к нему доступ с помощью кода:

XElement tempElement = doc.Descendants(XName.Get("ab:test")).FirstOrDefault();

Это дает мне эту ошибку:

System.Web.Services.Protocols.SoapException: серверу не удалось обработать запрос. ---> System.Xml.XmlException: символ ':', шестнадцатеричное значение 0x3A, нельзя включить в имя.

Как мне получить к нему доступ?

Ответы [ 5 ]

104 голосов
/ 04 апреля 2010

Если вы хотите использовать пространства имен, LINQ to XML сделает это очень просто:

XNamespace ab = "http://whatever-the-url-is";
XElement tempElement = doc.Descendants(ab + "test").FirstOrDefault();

Найдите в документе раздел xmlns:ab=..., чтобы узнать, к какому URI пространства имен относится «ab».

21 голосов
/ 03 июня 2013

Попробуйте поместить ваше пространство имен в { ... } примерно так:

string xfaNamespace = "{http://www.xfa.org/schema/xfa-template/2.6/}";
12 голосов
/ 18 февраля 2014

У меня была такая же ошибка. Я обнаружил, что добавляю код ...

var ab = "http://whatever-the-url-is";

... но ab была определена как строка. Это вызвало ошибку, о которой сообщает OP. Вместо использования ключевого слова VAR я использовал реальный тип данных XNamespace ...

XNamespace ab = "http://whatever-the-url-is";

... и проблема ушла.

6 голосов
/ 04 апреля 2010

Существует перегрузка метода Get, который вы, возможно, захотите попробовать, который учитывает пространство имен. Попробуйте это:

XElement tempElement = doc.Descendants(XName.Get("test", "ab")).FirstOrDefault();
3 голосов
/ 24 октября 2013

Попробуйте получить пространство имен из документа

var ns = doc.Root.Name.Namespace;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...