gpt4 book ai didi

wcf - 如何向 WCF SyndicationFeed 添加另一个命名空间?

转载 作者:行者123 更新时间:2023-12-04 16:52:32 24 4
gpt4 key购买 nike

在我的提要生成代码中,我有以下内容:

XNamespace itunesNS = "http://www.itunes.com/dtds/podcast-1.0.dtd";
feed.ElementExtensions.Add(
new XElement(itunesNS + "subtitle",
new XAttribute(XNamespace.Xmlns + "itunes", itunesNS.NamespaceName),
"sample subtitle").CreateReader());

它会产生这样的东西:
<itunes:subtitle xmlns:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd">sample subtitle</itunes:subtitle>

如何在 channel 元素中获得 itunes 命名空间的声明 (xmlns:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd") 以便不必在每个元素上重复iTunes 元素?

我的提要是使用 System.ServiceModel.Syndication.SyndicationFeed 创建的。

最佳答案

我正确支持 iTunes 的最终解决方案是:

public class ItunesFeed : SyndicationFeed {
private string @namespace = "http://www.itunes.com/dtds/podcast-1.0.dtd";
private string prefix = "itunes";

public string Subtitle {get; set;}
public string Author { get; set; }
public string Summary { get; set; }
public string OwnerName { get; set; }
public string OwnerEmail { get; set; }
public bool Explicit { get; set; }
public List<List<string>> ItunesCategories = new List<List<string>>();

protected override void WriteAttributeExtensions(XmlWriter writer, string version) {
writer.WriteAttributeString("xmlns", prefix, null, @namespace);
}

protected override void WriteElementExtensions(XmlWriter writer, string version) {
WriteItunesElement(writer, "subtitle", Subtitle);
WriteItunesElement(writer, "author", Author);
WriteItunesElement(writer, "summary", Summary);
if (ImageUrl != null) {
WriteItunesElement(writer, "image", ImageUrl.ToString());
}
WriteItunesElement(writer, "explicit", Explicit ? "yes" : "no");

writer.WriteStartElement(prefix, "owner", @namespace);
WriteItunesElement(writer, "name", OwnerName);
WriteItunesElement(writer, "email", OwnerEmail);
writer.WriteEndElement();

foreach (var category in ItunesCategories) {
writer.WriteStartElement(prefix, "category", @namespace);
writer.WriteAttributeString("text", category[0]);
if (category.Count == 2) {
writer.WriteStartElement(prefix, "category", @namespace);
writer.WriteAttributeString("text", category[1]);
writer.WriteEndElement();
}
writer.WriteEndElement();
}
}

private void WriteItunesElement(XmlWriter writer, string name, string value) {
if (value != null) {
writer.WriteStartElement(prefix, name, @namespace);
writer.WriteValue(value);
writer.WriteEndElement();
}
}
}


public class ItunesItem : SyndicationItem {
private string @namespace = "http://www.itunes.com/dtds/podcast-1.0.dtd";
private string prefix = "itunes";

public string Subtitle { get; set; }
public string Author { get; set; }
public string Duration { get; set; }
public string Keywords { get; set; }
public bool Explicit { get; set; }

protected override void WriteElementExtensions(XmlWriter writer, string version) {
WriteItunesElement(writer, "subtitle", Subtitle);
WriteItunesElement(writer, "author", Author);
WriteItunesElement(writer, "summary", Summary.Text);
WriteItunesElement(writer, "duration", Duration);
WriteItunesElement(writer, "keywords", Keywords);
WriteItunesElement(writer, "explicit", Explicit ? "yes" : "no");
}

private void WriteItunesElement(XmlWriter writer, string name, string value) {
if (value != null) {
writer.WriteStartElement(prefix, name, @namespace);
writer.WriteValue(value);
writer.WriteEndElement();
}
}
}

关于wcf - 如何向 WCF SyndicationFeed 添加另一个命名空间?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1375119/

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