我正在查询Sharepoint服务器端并将结果作为Xml返回.我希望在将Xml通过WebMethod发送到jQuery之前将其缩小为更轻量级的东西.
但是我的XPath查询无效.我认为以下代码将返回所有Document节点,但它不返回任何内容.我以前曾经使用过XPath,我想//Document这就是诀窍.
C#XPath查询
XmlDocument xmlResults = new XmlDocument();
xmlResults.LoadXml(xml); // XML is a string containing the XML source shown below
XmlNodeList results = xmlResults.SelectNodes("//Document");
Run Code Online (Sandbox Code Playgroud)
正在查询XML
<ResponsePacket xmlns="urn:Microsoft.Search.Response">
<Response domain="QDomain">
<Range>
<StartAt>1</StartAt>
<Count>2</Count>
<TotalAvailable>2</TotalAvailable>
<Results>
<Document relevance="126" xmlns="urn:Microsoft.Search.Response.Document">
<Title>Example 1.doc</Title>
<Action>
<LinkUrl size="32256" fileExt="doc">http://hqiis99/Mercury/Mercury documents/Example 1.doc</LinkUrl>
</Action>
<Description />
<Date>2010-08-19T14:44:56+01:00</Date>
</Document>
<Document relevance="31" xmlns="urn:Microsoft.Search.Response.Document">
<Title>Mercury documents</Title>
<Action>
<LinkUrl size="0" fileExt="aspx">http://hqiis99/mercury/Mercury documents/Forms/AllItems.aspx</LinkUrl>
</Action>
<Description />
<Date>2010-08-19T14:49:39+01:00</Date>
</Document>
</Results>
</Range>
<Status>SUCCESS</Status>
</Response>
</ResponsePacket>
Run Code Online (Sandbox Code Playgroud)
Jon*_*eet 11
您正在尝试选择Document没有命名空间的元素...而默认命名空间实际上是"urn:Microsoft.Search.Response".
我想你想要这样的东西:
XmlDocument xmlResults = new XmlDocument();
xmlResults.LoadXml(xml);
XmlNamespaceManager manager = new XmlNamespaceManager(xmlResults.NameTable);
manager.AddNamespace("ns", "urn:Microsoft.Search.Response.Document");
XmlNodeList results = xmlResults.SelectNodes("//ns:Document", manager);
Run Code Online (Sandbox Code Playgroud)
这找到了两个元素.
如果您可以使用LINQ to XML,那么它会更容易:
XDocument results = XDocument.Parse(xml);
XNamespace ns = "urn:Microsoft.Search.Response.Document";
var documents = results.Descendants(ns + "Document");
Run Code Online (Sandbox Code Playgroud)
我喜欢LINQ to XML的命名空间处理:)
| 归档时间: |
|
| 查看次数: |
1052 次 |
| 最近记录: |