2013-09-26 3 views
0

У меня есть следующий фрагмент XML (Zimbra SOAP API, если кто-то заботится, но это не важно)Почему SelectSingleElement работает для некоторых запросов, но не для других?

<appt id="266" uid="bf177af2-2875-447a-8e74-d9bc8c108611" nextAlarm="1409547300000" d="1380213518000" rev="63" s="0" l="10" xmlns="urn:zimbraMail"> 
    <inv id="265" seq="3" compNum="0" type="appt"> 

У меня есть XmlElement, который содержит этот фрагмент. Я настроил менеджер пространства имен и т.д., как следует

XmlNamespaceManager ns = new XmlNamespaceManager(element.OwnerDocument.NameTable); 
ns.AddNamespace("prefix", "urn:zimbraMail"); 

Следующий код

element.SelectSingleNode("//prefix:" + "appt/@id", ns).Value 

возвращает 266, как ожидалось

, но я не могу управлять, чтобы выбрать АЧТВ, АЧТВ/инв или что-нибудь еще , за исключением, в основном, атрибутов appt. Вот несколько из моих запросов. Некоторые возвращаются нуль, некоторые возвращают плохой формат (как я был мечется)

element.SelectSingleNode("//prefix:" + "appt/inv", ns).Value 
element.SelectSingleNode("//prefix:" + "/appt/inv", ns).Value 
element.SelectSingleNode("//prefix:" + "/inv", ns).Value 
element.SelectSingleNode("//prefix:" + "appt", ns).Value 

Я также пытался не включая префиксы и т.д. Любая помощь? Частью проблемы может быть то, что OwnerDoc представляет собой SOAP-конверт, который может заворачивать пространства имен, но тогда почему первый запрос будет работать? (Кстати, первый запрос работает даже без использования логики пространства префикса/пространства имен)

ответ

1

Вам необходимо подписать все элементы, а не только первый. Итак:

//prefix:appt/inv 

Должно быть:

//prefix:appt/prefix:inv 

Плохое исключение формат обусловлено следующим, потому что имена элементов не может начинаться с /:

//prefix:/appt/inv 
//prefix:/inv 
+0

, который должен быть тупица, которую я когда-либо видел. это делает xpath синтаксис практически бесполезным для меня. –

+0

Я закончил тем, что просто лишил пространство имен, это сделало все в 100 раз проще. –

+0

Добро пожаловать в XML - очень полезный, но очень многословный :) –

Смежные вопросы