为什么SelectSingleElement适用于某些查询,而不适用于其他查询?

时间:2013-09-26 17:17:56

标签: xml selectsinglenode

我有以下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信封,可能会搞砸名称空间,但为什么第一个查询会起作用? (顺便说一下,即使不使用前缀/命名空间逻辑,第一个查询也可以工作)

1 个答案:

答案 0 :(得分:1)

您需要限定所有元素,而不仅仅是第一个元素。所以:

//prefix:appt/inv

应该是:

//prefix:appt/prefix:inv

错误的格式异常是由于以下原因造成的,因为元素名称不能以/开头:

//prefix:/appt/inv
//prefix:/inv