2016-11-09 15 views
1

XElementから "xmlns"名前空間を削除するにはどうすればよいですか?- XElementからxmlnsを削除するには

私は試してみました:attributes.remove、xElement.Name.NameSpace.Remove(0)など。成功しませんでした。

私のxml:

<event xmlns="http://www.blablabla.com/bla" version="1.00"> 
    <retEvent version="1.00"> 
    </retEvent> 
</event> 

どのように私はこれを達成することができますか?

+3

することができます」簡単にそれを行う;それは名前空間を持たないようにすべての名前を書き換えることを意味します。どのような問題を解決しようとしていますか?一貫して名前空間を使用する必要があります。 – SLaks

+0

そして、XMLはどうやって始めるのですか?あなたのコードはそれを作成していますか、それとも他の場所から読んでいるXMLですか?より多くの情報はここで非常に役立つだろう。 –

+0

SLaks、いくつかのノードに名前空間が存在する場合、私のスキーマが検証されないという問題があります。 – Eduardo

答えて

2

あなたは、名前空間

xelement.Attributes() 
     .Where(e => e.IsNamespaceDeclaration) 
     .Remove(); 
+0

@octaviocclに感謝します。やってみます。 – Eduardo

+0

男はうまくいきませんでした! xmlnsが認識されなかったのは名前空間でした。 – Eduardo

+0

"を" a "名前空間 – Eduardo

0

xelement.Attributes()が空であるため、受け入れ答えは、それが属性として名前空間を返していなかった、私のために動作しませんでしたある属性を検出するためにIsNamespaceDeclarationを使用することができます。

以下は、あなたのケースで宣言を削除します:

element.Name = element.Name.LocalName;

あなたの要素のための再帰的にそれをしたいと、すべての子要素には、以下を使用する場合:

private static void RemoveAllNamespaces(XElement element) 
    { 
     element.Name = element.Name.LocalName; 

     foreach (var node in element.DescendantNodes()) 
     { 
      var xElement = node as XElement; 
      if (xElement != null) 
      { 
       RemoveAllNamespaces(xElement); 
      } 
     } 
    } 
関連する問題