1

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>

次のコードを試しました:

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は常に null であるか、で例外が発生し.SelectSingleNodeます。ここで何が欠けていますか?

4

5 に答える 5

4

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;
于 2013-08-05T22:25:41.097 に答える
2

これを試してもらえますか?

XmlElement root = doc.DocumentElement.SelectSingleNode(@"//ns1:ApexClass/ns1:rffolder) as XmlElement;
于 2013-08-05T22:23:15.890 に答える
1

LinqToXml を使用できます

 var node = XElement.Load(@"C:\Test.xml")
                    .Element(XName.Get("rffolder","http://soap.sforce.com/2006/04/metadata"));
于 2013-08-05T22:29:21.697 に答える
1

Linq2Xml を使用したくない場合:

まず、XML では、ルートは ApexClass ではなく ApexPage と呼ばれ、XmlNamespaceManager を SelectSingleNode に渡すのを忘れています。

そう:

string query = @"/ns1:ApexPage/ns1:rffolder";
var xmlNode = root.SelectSingleNode(query, mgr);

同様に動作するはずです

于 2013-08-05T22:38:20.950 に答える
0

クエリ文字列を次のように変更してみてください。

string query = "//ns1:ApexClass/ns1:rffolder";
于 2013-08-05T22:24:46.413 に答える