为什么当将 xml 根目录作为 xpath 的一部分时,我没有得到任何结果。
我在"/rdf:RDF/channel"
XElement 上使用了一个简单的 xpath(见下文)
我将所有命名空间添加到XmlNamespaceManager
,但没有得到任何结果,就像xpathNavigator
已经在根目录中一样,因此它需要一个以 . 开头的路径/channel
。
编码:
const string rdfFile = @"C:\index.rdf";
var text = File.ReadAllText(rdfFile);
XmlReader reader = XmlReader.Create(new StringReader(text));
XElement doc = XElement.Load(reader);
XmlNameTable nameTable = reader.NameTable;
XmlNameTable table = nameTable ?? new NameTable();
var manager = new XmlNamespaceManager(table);
manager.AddNamespace(RDFNamespaceName, RDFNamespace);
manager.AddNamespace(RDFNamespaceName2, RDFNamespace2);
manager.AddNamespace(RDFNamespaceName3, RDFNamespace3);
manager.AddNamespace(RDFNamespaceName4, RDFNamespace4);
manager.AddNamespace(RDFNamespaceName5, RDFNamespace5);
manager.AddNamespace(RDFNamespaceName6, RDFNamespace6);
manager.AddNamespace(RDFNamespaceName7, RDFNamespace7);
var res = doc.XPathSelectElements(RDFXpath, manager);
private const string RDFXpath = "/rdf:RDF/channel";
private const string RDFNamespaceName = "rdf";
private const string RDFNamespace = @"http://www.w3.org/1999/02/22-rdf-syntax-ns#";
private const string RDFNamespaceName2 = "";
private const string RDFNamespace2 = @"http://purl.org/rss/1.0/";
private const string RDFNamespaceName3 = "cc";
private const string RDFNamespace3 = @"http://web.resource.org/cc/";
private const string RDFNamespaceName4 = "content";
private const string RDFNamespace4 = @"http://purl.org/rss/1.0/modules/content/";
private const string RDFNamespaceName5 = "admin";
private const string RDFNamespace5 = @"http://webns.net/mvcb/";
private const string RDFNamespaceName6 = "sy";
private const string RDFNamespace6 = @"http://purl.org/rss/1.0/modules/syndication/";
private const string RDFNamespaceName7 = "dc";
private const string RDFNamespace7 = @"http://purl.org/dc/elements/1.1/";
部分xml:
<?xml version="1.0" encoding="utf-8" ?>
- <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:sy="http://purl.org/rss/1.0/modules/syndication/" xmlns:admin="http://webns.net/mvcb/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:cc="http://web.resource.org/cc/" xmlns="http://purl.org/rss/1.0/">
- <channel rdf:about="http://blogs.charlotte.com/panthers/">
<title>Inside the Panthers</title>
...