简体   繁体   English

如何到达命名空间xml文件中的节点?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM