これはC#
で管理する必要があるより複雑なXML
の簡略化されたバージョンです。ローカル名XPATHでコロンを使用してXMLタグを管理する方法
名前空間内のタグにアクセスしようとすると、XPATH
は機能しません。
XmlDocument xmlDoc = new XmlDocument();
xmlDoc.LoadXml("<s:Body xmlns:s=\"sssssss\"><s:SessionID>abcde</s:SessionID></s:Body>");
string xpath = "//*[local-name()='s:SessionID']";
Context.UserLogger.Info(xmlDoc.SelectSingleNode(xpath).InnerText);
//Object reference not set to an instance of an object
しかし、コードはタグにコロンを付けずに完全に機能します。
XmlDocument xmlDoc = new XmlDocument();
xmlDoc.LoadXml("<s:Body xmlns:s=\"sssssss\"><SessionID>abcde</SessionID></s:Body>");
string xpath = "//*[local-name()='SessionID']";
Context.UserLogger.Info(xmlDoc.SelectSingleNode(xpath).InnerText);
//abcde
私は "// * [ローカル名()=さん:セッションIDが ']" XPATHバリデータに確保しています正常に動作します。
私には何が欠けていますか?事前に
おかげで、
私はXmlNamespaceManager
に関する情報を読みましたが、私は「直接」のパスを使用することを好むだろう。 XMLはネームスペースでいっぱいであり、動的なので、構造がかなり頻繁に変更されます。
直接 "パス" *とはどういう意味ですか? XMLに名前空間があり、XPathを使用するには名前空間マネージャが必要です。物語の終わり。 – Tomalak
オンラインのXpathを持つ@Tomalakは、 "直接"パスを検証します// * [local-name()= 's:SessionID'はネームスペースの管理なしで動作します。 – Andoxko
これが実際に動作するのは、その特定のオンラインXPathテスターが壊れているからです。 'local-name()'は '' s:SessionID''のようなものを返すことはありません。 – Tomalak