Исключение при использовании XName и пространства имен [duplicate]

Возможно, это будет полезно:

    function parseJson(code)
{
    try {
        return JSON.parse(code);
    } catch (e) {
        return code;
    }
}
function parseJsonJQ(code)
{
    try {
        return $.parseJSON(code);
    } catch (e) {
        return code;
    }
}

var str =  "{\"a\":1,\"b\":2,\"c\":3,\"d\":4,\"e\":5}";
alert(typeof parseJson(str));
alert(typeof parseJsonJQ(str));
var str_b  = "c";
alert(typeof parseJson(str_b));
alert(typeof parseJsonJQ(str_b));

output:

IE7: строка, объект, строка, строка

CHROME: объект, объект, строка , строка

63
задан yoozer8 17 January 2013 в 20:17
поделиться

5 ответов

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

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

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

93
ответ дан Jon Skeet 20 August 2018 в 07:22
поделиться
  • 1
    Он работает, но проблема в том, что значение xmlns: ab генерируется динамически на основе метки времени. Как я могу получить его значение? – coure2011 4 April 2010 в 21:31
  • 2
    @ coure06: URI пространства имен является динамическим? Это довольно странно. Но да, вы можете получить его, найдя значение атрибута для XNamespace.Xmlns + "ab" от того, какой элемент объявляет его. – Jon Skeet 4 April 2010 в 23:43
  • 3
    Я получаю эту ошибку: stackoverflow.com/questions/42839628/… – Si8 16 March 2017 в 18:15

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

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

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

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

... и проблема исчезла.

11
ответ дан barrypicker 20 August 2018 в 07:22
поделиться

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

XElement tempElement = doc.Descendants(XName.Get("test", "ab")).FirstOrDefault();
6
ответ дан Blair Scott 20 August 2018 в 07:22
поделиться
  • 1
    ab здесь не является фактическим пространством имен - это просто псевдоним для пространства имен. (К сожалению, я не знаю правильной терминологии). LINQ to XML упрощает работу с XNamespace. Редко вам нужно явно вызвать XName.Get в LINQ to XML. – Jon Skeet 4 April 2010 в 20:15
  • 2
    ах моя ошибка, спасибо за разъяснение – Blair Scott 4 April 2010 в 23:37

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

var ns = doc.Root.Name.Namespace;
3
ответ дан Jason Dias 20 August 2018 в 07:22
поделиться

Попробуйте помещать ваше пространство имен в { ... } следующим образом:

string xfaNamespace = "{http://www.xfa.org/schema/xfa-template/2.6/}";
19
ответ дан Serj Sagan 20 August 2018 в 07:22
поделиться
Другие вопросы по тегам:

Похожие вопросы: