2011-03-01 3 views
7

私はこのようなクラスを持っている:個々の要素ではなくSyndicationFeedに名前空間を追加しますか?

public static class MyFeedExtensions 
{ 
    private readonly static XNamespace _namespace = XNamespace.Get(@"http://mynamespace"); 

    public static XElement MyElement(string value) 
    { 
     return new XElement(_namespace + "MyElement", value); 
    } 
} 

私は、カスタムの拡張機能を持つAtomフィードを生成するためにそれを使用しています:

var feed = new SyndicationFeed(); 
feed.ElementExtensions.Add(MyFeedExtensions.MyElement("Testing!")); 

これは、フィードはに私の名前空間を追加することを除いて、正常に動作します要素:

<feed xmlns="http://www.w3.org/2005/Atom"> 
    <title type="text">Hello World!</title> 
    <id>00000000-0000-0000-0000-000000000000</id> 
    <updated>2011-03-01T01:00:53Z</updated> 
    <MyElement xmlns="http://mynamespace">Testing!</MyElement> 
</feed> 

このような出力を得るには、フィードに名前空間を登録する方法がありますか?

<feed xmlns="http://www.w3.org/2005/Atom" xmlns:my="http://mynamespace"> 
    <title type="text">Hello World!</title> 
    <id>00000000-0000-0000-0000-000000000000</id> 
    <updated>2011-03-01T01:00:53Z</updated> 
    <my:MyElement>Testing!</my:MyElement> 
</feed> 

理想的には、私は私がElementExtensionsとSyndicationItemsを持っている場合、フィードはすべての様々な名前空間について知っておくべきこととして、仕事にもこれをしたいと思います。

(編集:これは、XMLのサイズを小さくすると、それが簡単に人間のため読むことを作るために純粋である):基本的に

feed.AttributeExtensions.Add(
    new XmlQualifiedName("my",XNamespace.Xmlns.ToString()), 
    MyFeedExtensions.Namespace.ToString()); 

+0

マイケル、あなたは2つが同じであることをご存知ですか? –

+0

@John Semanticallyはい、私はちょうど生成されたXMLのサイズを小さくしようとしています –

+0

あなたはすべての拡張機能をラッパー要素に入れることができますか? –

答えて

10

this questionで答えを発見し、それを適応登録a xmlns:myフィード内の属性。フィード内のSyndicationItemに追加されていても、要素の名前空間を自動的に取得します。

わかりにくいですが、きれいです!

関連する問題