と大文字または小文字にselectnodeが鈍感な作り名前は大文字と小文字に区別されないmyfile:boOkS
またはmyfile:BOOKS
ですか?は、私は、次のXMLを持っている名前空間
もう1つの質問は私のnamespaceManagerですか?もっとシンプルにできますか?
と大文字または小文字にselectnodeが鈍感な作り名前は大文字と小文字に区別されないmyfile:boOkS
またはmyfile:BOOKS
ですか?は、私は、次のXMLを持っている名前空間
もう1つの質問は私のnamespaceManagerですか?もっとシンプルにできますか?
local-name()
およびnamespace-uri()
関数を使用して、XPathクエリで要素名と名前空間を返し、次にtranslate()
関数を使用してローカル名を小文字にすることができます。
したがって、次の作業をする必要があります:.Net fiddle作業
var elementName = "books"; // Or whatever
var nameSpaceUri = el.OwnerDocument.DocumentElement.NamespaceURI;
var xpathQuery = string.Format(@"/myfile:bookstore/*[translate(local-name(), 'ABCDEFGHIJKLMNOPQRSTUVWXYZ', 'abcdefghijklmnopqrstuvwxyz')='{0}' and namespace-uri()='{1}']", elementName, nameSpaceUri);
var node = el.SelectSingleNode(xpathQuery, nsmgr);
サンプルを。
この場合、name()
関数の戻り値を小文字にすることは避けてください。例えば。次の操作を行うように誘惑されることがあります。
var node = el.SelectSingleNode(@"/myfile:bookstore/*[translate(name(), 'ABCDEFGHIJKLMNOPQRSTUVWXYZ', 'abcdefghijklmnopqrstuvwxyz') = 'myfile:books']", nsmgr);
それはリテラル'myfile:books'
文字列内の名前空間接頭辞myfile:
をハードコードしかし、このはを使用すべきではありません。後で入力XMLは異なる接頭辞を使用するように変更された場合 - など、またはまったく接頭辞:
<bookstore xmlns="http://MyRootNameSpace">
<Books>
<Book> Book 1</Book>
<Book> Book 2</Book>
</Books>
</bookstore>
その後、あなたのXPathクエリは、新しいXMLが古いと意味的に同じであるという事実にもかかわらず破ります。
パーフェクト!ありがとうございました! –
@ E.Hayes - 喜んで助けてください。質問に答えるには、[それをそのままとしてください](https://meta.stackexchange.com/questions/147531/how-mark-my-question-as-answered-on-stackoverflow)してください。 – dbc
どうすればわかるのですか –
例ノードが好きなら、 OR すべてのケースでうまくいきたいです –