7

私はこのようなクラスを持っています:

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 のサイズを小さくし、人間が読みやすくするためです)

4

1 に答える 1

10

この質問で答えを見つけて、それを適応させました:

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

基本的に:xmlns:my属性をフィードに登録すると、要素SyndicationItemがフィード内に追加された場合でも、要素の名前空間が自動的に取得されます。

目立たないけどすっきり!

于 2011-03-01T01:25:43.337 に答える