私は VB 2008 を使用しており、XDocument のルート要素に xmlns="mynamespace" 属性を追加しようとしています。
XML ドキュメントはサード パーティによって作成され、VB XDocument オブジェクトに読み込まれました。当然、名前空間はありません。私はローカル コピーに取り組んでおり、MSDNの Beth Massi vids の指示に従って、VB で XMLToSchema を使用してインテリセンスなどを有効にできるように、テキスト エディターで名前空間に追加しました。コードの残りの部分が機能するようになったので、ライブ ドキュメントをもう一度開きたいと思います。名前空間がないと、XML リテラルが解決されません。
いくつかの方法を使用して XMLNS プロパティをルート タグに追加しようとしましたが、失敗しました。最も近いのは次の 3 つのコード サンプルでした。
Dim myNS As XNamespace = "urn:nbf:namespacename"
myXML.Element("nameofrootelement").Add(myNS)
^^^^ 名前空間は、属性としてではなく、ルート要素の値として追加されました。
XML.Root.Add(New XAttribute("xmlns", "name"))
^^^^ エラーが生成されました: 実行時例外がスローされました: System.Xml.XmlException - 同じ開始要素タグ内でプレフィックス '' を '' から 'name' に再定義することはできません。
しかし
XML.Root.Add(New XAttribute("test", "name"))
^^^^ 正常に動作します。おそらく、予約済みの属性を手動で設定しようとするのは好きではありませんか? この名前空間は、私が行ったいくつかのグーグルからは複雑すぎるようです。
この問題を回避するにはどうすればよいですか? :D
ありがとう!
アップデート
ありがとうアンソニー。
名前空間について理解を深める必要があると思います。
と思いました。ToString
それを変更し、次に . Parse
それもそうですが、もう少し理解を深めるのに役立つように、より良い解決策が必要でした! 私はこれを試しましたが、あなたが正しく指摘したように、それはすべての子孫にも影響するため、まだ壊れています。
さまざまなサード パーティによって作成された複数の XML フィードを使用しますが、簡単にするために、名前空間を完全に省略します。
私自身のカスタム解析関数は、サード パーティのフィードを 1 つの統一されたドキュメントに書き換え、それを別のルーチンで処理します。XML の中間部分に ns を追加できるので、2 次関数をコーディングするときに役立ちます。
ありがとう!