0

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

4

1 回答 1

1

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

//prefix:appt/inv

应该:

//prefix:appt/prefix:inv

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

//prefix:/appt/inv
//prefix:/inv
于 2013-09-26T17:22:43.387 回答