1

SelectSingleNode を使用して、C# で XML 文字列からノードを取得しようとしています。XML 文字列は外部ソースから取得されます。

string logonXML = @"<attrs xmlns=""http://www.sap.com/rws/bip\"">
                        <attr name=""userName"" type=""string""></attr>
                        <attr name=""password"" type=""string""></attr>
                        <attr name=""auth"" type=""string"" possibilities=""secEnterprise,secLDAP,secWinAD,secSAPR3"">secEnterprise</attr>
                    </attrs>";

XmlDocument doc = new XmlDocument();
doc.LoadXml(logonXML);
XmlNode root = doc.DocumentElement;

XmlNode usernameXML = root.SelectSingleNode("//attr[@name='userName']");
Debug.WriteLine(usernameXML.OuterXml);

ただし、usernameXML はnull. と の両方を XPath クエリのいくつかのバリエーションで使用してみましdocrootが、ノードが見つからないようです。この XPath の何が問題になっていますか? それとも、ライブラリの使い方が間違っていますか?

4

1 に答える 1

2

ルート ノードで定義されているXML 名前空間を考慮する必要があります。

次のようなことを試してください:

string logonXML = @"<attrs xmlns=""http://www.sap.com/rws/bip"">
                        <attr name=""userName"" type=""string""></attr>
                        <attr name=""password"" type=""string""></attr>
                        <attr name=""auth"" type=""string"" possibilities=""secEnterprise,secLDAP,secWinAD,secSAPR3"">secEnterprise</attr>
                    </attrs>";

XmlDocument doc = new XmlDocument();
doc.LoadXml(logonXML);

// define the XML namespace(s) that's in play here
XmlNamespaceManager nsmgr = new XmlNamespaceManager(doc.NameTable);
nsmgr.AddNamespace("ns", "http://www.sap.com/rws/bip");

// select including the XML namespace manager
XmlNode usernameXML = doc.SelectSingleNode("/ns:attrs/ns:attr[@name='userName']", nsmgr);

string test = usernameXML.InnerText;
于 2013-05-31T20:45:03.850 に答える