gpt4 book ai didi

c# - 如何使用自定义命名空间创建 SyndicationFeed

转载 作者:太空狗 更新时间:2023-10-30 01:25:53 26 4
gpt4 key购买 nike

如何生成包含下图中显示的命名空间的 Atom Feed? Atom 提要的所有节点都必须以“a:”开头。

enter image description here

这是我现在正在做的,但是它不起作用。

    SyndicationFeed feed = new SyndicationFeed();
XmlQualifiedName key = new XmlQualifiedName("os", "xmlns");
feed.AttributeExtensions.Add(key, "http://a9.com/-/spec/opensearch/1.1/");

谢谢!

最佳答案

我认为应该是

SyndicationFeed feed = new SyndicationFeed();
XmlQualifiedName key = new XmlQualifiedName("os", "http://www.w3.org/2000/xmlns/");
feed.AttributeExtensions.Add(key, "http://a9.com/-/spec/opensearch/1.1/");

更新:

在更仔细地阅读您的问题后,我相信您可以通过覆盖 WriteStartElement 来完成此操作和 WriteStartAttribute XmlWriter 的方法Atom10FeedFormatter 使用的实例.您可以通过实现自定义 XmlWriter 类来完成此操作,如下例所示。

class AtomXmlTextWriter : XmlTextWriter
{
private const string Atom10XmlNs = "http://www.w3.org/2005/Atom";
private const string Atom10XmlNsPrefix = "a";

public AtomXmlTextWriter(String filename, Encoding encoding)
: base(filename, encoding)
{
}

public override void WriteStartElement(string prefix, string localName, string ns)
{
base.WriteStartElement(GetAtomPrefix(ns), localName, ns);
}

public override void WriteStartAttribute(string prefix, string localName, string ns)
{
base.WriteStartAttribute(GetAtomPrefix(ns), localName, ns);
}

internal string GetAtomPrefix(string ns)
{
string prefix = string.Empty;

if ((ns != null) && (ns.Equals(Atom10XmlNs)))
prefix = Atom10XmlNsPrefix;

return prefix;
}
}

将自定义类与 Atom10FeedFormatter 一起使用

SyndicationFeed feed = new SyndicationFeed();
feed.AttributeExtensions.Add(new XmlQualifiedName("os", "http://www.w3.org/2000/xmlns/"),
"http://a9.com/-/spec/opensearch/1.1/");

feed.AttributeExtensions.Add(new XmlQualifiedName(null, "http://www.w3.org/2000/xmlns/"),
http://schemas.zune.net/catalog/apps/2008/02");

using (XmlWriter writer = new AtomXmlTextWriter(@"TestFeed.xml", Encoding.UTF8))
{
Atom10FeedFormatter feedFormatter = new Atom10FeedFormatter(feed);
feedFormatter.WriteTo(writer);
}

产生所需的输出

<a:feed xmlns:os="http://a9.com/-/spec/opensearch/1.1/" 
xmlns="http://schemas.zune.net/catalog/apps/2008/02"
xmlns:a="http://www.w3.org/2005/Atom">
<a:title type="text" />
<a:id>uuid:0f1b2c84-c935-459e-bc89-79d06b5a976b;id=1</a:id>
<a:updated>2011-05-21T17:07:46Z</a:updated>
</a:feed>

关于c# - 如何使用自定义命名空间创建 SyndicationFeed,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6078777/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com