web-dev-qa-db-ja.com

':'文字、16進値0x3Aは名前に含めることができません

次のような要素を含むxmlファイルがあります

<ab:test>Str</ab:test>  

コードを使用してアクセスしようとすると:

XElement tempElement = doc.Descendants(XName.Get("ab:test")).FirstOrDefault();

それは私にこのエラーを与えています:

System.Web.Services.Protocols.SoapException:サーバーは要求を処理できませんでした。 ---> System.Xml.XmlException: ':'文字、16進値0x3Aは名前に含めることができません。

どうすればアクセスできますか?

72
coure2011

名前空間を使用する場合は、LINQ to XMLを使用すると非常に簡単になります。

XNamespace ab = "http://whatever-the-url-is";
XElement tempElement = doc.Descendants(ab + "test").FirstOrDefault();

xmlns:ab=...セクションで、「ab」が参照する名前空間URIを確認します。

106
Jon Skeet

名前空間を{ ... }に入れてみてください:

string xfaNamespace = "{http://www.xfa.org/schema/xfa-template/2.6/}";
21
Serj Sagan

同じエラーが発生していました。コードを追加していたことがわかりました...

var ab = "http://whatever-the-url-is";

...しかし、abは文字列であると判断されました。これにより、OPによって報告されるエラーが発生しました。 VARキーワードを使用する代わりに、実際のデータ型XNamespaceを使用しました...

XNamespace ab = "http://whatever-the-url-is";

...そして問題はなくなりました。

14
barrypicker

名前空間を考慮した、試してみたいGetメソッドのオーバーロードがあります。これを試して:

XElement tempElement = doc.Descendants(XName.Get("test", "ab")).FirstOrDefault();
7
Blair Scott

ドキュメントから名前空間を取得してみてください

var ns = doc.Root.Name.Namespace;
3
Jason Dias