как предоставить пространство имен для использования запроса xpath в target-c

я пытаюсь использовать xpath-запрос в своем приложении для разбора xml. моя работа почти завершена, пока не появилась концепция пространства имен. Я всегда правильно пишу запрос, но он возвращает мне 0 объектов в моем массиве. Я пробовал много блогов, а также много сообщений на нашем stackoverflow.com, но ни один из них не работает. .я надеюсь, что моя проблема нуждается в небольшой модификации, может ли кто-нибудь изменить мой код. array-in-iphone">мой код Всем спасибо. Я думаю, что многие люди пытаются показать, что мой вопрос дублируется, но он отличается, потому что ни один из вопросов не помог решить мою проблему. Пожалуйста, предоставьте мне свое предложение. Ваш ответ больше поможет мне в моей работе.


person ajay    schedule 21.05.2011    source источник


Ответы (1)


Я так понимаю, вы используете для этого libxml вместе с обертками Cocoa Мэтта Галлахера? (Полезно указать, какие сторонние библиотеки вы используете в своем вопросе.)

Когда я сделал это, я изменил код Мэтта, чтобы PerformXPathQuery принимал дополнительный аргумент, NSDictionary пространств имен. (Другие функции, такие как PerformXMLXPathQuery, также принимают этот аргумент и проходят через объект.)

Затем в PerformXPathQuery после создания контекста я зарегистрировал пространства имен таким образом:

if (namespaces != nil)
{
    for (NSString *key in namespaces) 
    {
        xmlXPathRegisterNs(xpathCtx, (const xmlChar *)[key UTF8String], (const xmlChar *)[[namespaces objectForKey:key] UTF8String]);
    }
}
person Amy Worrall    schedule 23.05.2011
comment
Amorya Спасибо за ваш ответ. Не могли бы вы предоставить дополнительную информацию о пространстве имен. - person ajay; 23.05.2011
comment
я использую libxml2 framework, а также класс реализации xpathquery.m. - person ajay; 23.05.2011
comment
В ответе Ларша на ваш другой вопрос есть информация об этом. Как он сказал, вам нужно изменить свой запрос Xpath, чтобы использовать префикс для каждого тега. Затем вы должны зарегистрировать этот префикс для URL-адреса пространства имен, который находится в вашем XML: вы можете использовать для этого мой код. Чтобы взять его пример, с моим кодом вы должны передать NSDictionary с одним элементом, ключом imsq, значением http://www.imsglobal.org/xsd/imsqti_v2p1. - person Amy Worrall; 24.05.2011
comment
@Amorya, не могли бы вы посмотреть здесь tnx stackoverflow.com/questions/7007767/ - person Spring; 10.08.2011