我有以下 XML 片段(如果有人关心的话,Zimbra SOAP API,但这并不重要)
<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、appt/inv 或其他任何东西,除了 appt 的基本属性。以下是我尝试过的一些查询。有些返回 null,有些返回错误的格式(因为我正在折腾)
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 信封,它可能会搞砸命名空间,但为什么第一个查询会起作用?(顺便说一句,即使不使用前缀/命名空间逻辑,第一个查询也可以工作)