[英]How to get to a node in a namespaced xml file?
I am trying to get a node out of an XML file and having a hell of a time. 我试图从XML文件中取出一个节点,这真是令人费解。 XML: XML:
<?xml version="1.0" encoding="UTF-8"?>
<ApexPage xmlns="http://soap.sforce.com/2006/04/metadata">
<apiVersion>26.0</apiVersion>
<label>aaaWsPage2</label>
<description></description>
<rffolder>Robert Test</rffolder>
</ApexPage>
I tried the following code: 我尝试了以下代码:
var doc = new XmlDocument();
doc.Load(@"c:\test.xml");
var mgr = new XmlNamespaceManager(doc.NameTable);
mgr.AddNamespace("ns1", @"http://soap.sforce.com/2006/04/metadata");
XmlElement root = doc.DocumentElement;
string query = @"/ns1:ApexClass/ns1:rffolder";
var xmlNode = root.SelectSingleNode(query);
if (xmlNode != null)
Console.WriteLine(xmlNode.InnerXml);
xmlNode
is always null or I get an exception on .SelectSingleNode
. xmlNode
始终为null,或者我在.SelectSingleNode
上.SelectSingleNode
异常。 What am I missing here? 我在这里想念什么?
I always find Linq To Xml easier to use 我总是觉得Linq To Xml更易于使用
var xDoc = XDocument.Load(fname);
XNamespace ns = "http://soap.sforce.com/2006/04/metadata";
var folder = xDoc.Root.Element(ns + "rffolder").Value;
你可以试试这个吗?
XmlElement root = doc.DocumentElement.SelectSingleNode(@"//ns1:ApexClass/ns1:rffolder) as XmlElement;
You can use LinqToXml 您可以使用LinqToXml
var node = XElement.Load(@"C:\Test.xml")
.Element(XName.Get("rffolder","http://soap.sforce.com/2006/04/metadata"));
If you don't want to use Linq2Xml: 如果您不想使用Linq2Xml:
first of all, in the XML the root is called ApexPage, not ApexClass, and you forgot to pass the XmlNamespaceManager to the SelectSingleNode. 首先,在XML中,根称为ApexPage,而不是ApexClass,您忘记了将XmlNamespaceManager传递给SelectSingleNode。
So: 所以:
string query = @"/ns1:ApexPage/ns1:rffolder";
var xmlNode = root.SelectSingleNode(query, mgr);
Should work as well 应该也可以
尝试将查询字符串更改为:
string query = "//ns1:ApexClass/ns1:rffolder";
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.