У меня есть следующий фрагмент 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-конверт, который может заворачивать пространства имен, но тогда почему первый запрос будет работать? (Кстати, первый запрос работает даже без использования логики пространства префикса/пространства имен)
, который должен быть тупица, которую я когда-либо видел. это делает xpath синтаксис практически бесполезным для меня. –
Я закончил тем, что просто лишил пространство имен, это сделало все в 100 раз проще. –
Добро пожаловать в XML - очень полезный, но очень многословный :) –