您可以使用 selenium 浏览并获取 xml,但可以使用 .net 类来处理 xml。
The driver.PageSource
property 是一个字符串,您应该直接使用.Net 类来解析所表示的 xml。另外,也没有方法FindElementsByXPath()
在字符串对象上,除非这是您编写的扩展方法。
使用以下命令读取 xmldriver.PageSource
来自硒
var driver = new FirefoxDriver();
driver.Navigate().GoToUrl("http://website_name/languages.xml");
XmlReader reader = XmlReader.Create(driver.PageSource);
或者,通过直接浏览到 url 来读取 xml
XmlReader reader = XmlReader.Create("http://website_name/languages.xml");
然后使用下面的代码来解析和读取xml。
需要注意的关键点是如何将名称空间信息提供给 xpath。
//load xml document
XElement xmlDocumentRoot = XElement.Load(reader);
//also add the namespace infn, chose a prefix for the default namespace
XmlNameTable nameTable = reader.NameTable;
XmlNamespaceManager namespaceManager = new XmlNamespaceManager(nameTable);
namespaceManager.AddNamespace("a", "http://schemas.datacontract.org/2004/07/myproj.cnn.com");
//now query with your xml - remeber to prefix the default namespace
var items = xmlDocumentRoot.XPathSelectElements("//a:results/a:items/a:vList", namespaceManager);
Console.WriteLine("vlist has {0} items.", items.Count());
foreach (var item in items)
{
Console.WriteLine("Display name: {0}", item.XPathSelectElement("a:displayName",namespaceManager).Value);
}
// OR get a list of all display names using linq
var displayNames = items.Select(x => x.XPathSelectElement("a:displayName", namespaceManager).Value).ToList();
您将需要以下命名空间才能使上述内容正常工作:
using System;
using System.Linq;
using System.Xml;
using System.Xml.Linq;
using System.Xml.XPath;