【问题标题】:How to generate tag prefixes using XmlSerializer如何使用 XmlSerializer 生成标签前缀
【发布时间】:2010-05-11 12:16:30
【问题描述】:

我想使用 XmlSerializer 生成以下内容:

<atom:link href="http://dallas.example.com/rss.xml" rel="self" type="application/rss+xml" />

所以我尝试将命名空间添加到我的元素:

[...]

    [XmlElement("link", Namespace="atom")]
    public AtomLink AtomLink { get; set; }

[...]

但输出是:

<link xmlns="atom" href="http://dallas.example.com/rss.xml" rel="self" type="application/rss+xml" />

那么生成前缀标签的正确方法是什么?

【问题讨论】:

    标签: c# xmlserializer


    【解决方案1】:

    首先,原子命名空间通常是这样的:

    xmlns:atom="http://www.w3.org/2005/Atom"
    

    为了让你的标签使用atom命名空间前缀,你需要用它来标记你的属性:

    [XmlElement("link", Namespace="http://www.w3.org/2005/Atom")]
    public AtomLink AtomLink { get; set; }
    

    您还需要告诉XmlSerializer 使用它(感谢@Marc Gravell):

    XmlSerializerNamespaces ns = new XmlSerializerNamespaces();
    ns.Add("atom", "http://www.w3.org/2005/Atom");
    XmlSerializer xser = new XmlSerializer(typeof(MyType));
    xser.Serialize(Console.Out, new MyType(), ns);
    

    【讨论】:

    • 嗨,如果我使用 => new XmlSyndicationContent(contentType, content, serializerXml);我无法建立命名空间。我能做些什么?我希望原子条目的内容带有命名空间:(
    【解决方案2】:

    【讨论】:

    • 事实上我已经在使用这个了:XmlSerializerNamespaces ns = new XmlSerializerNamespaces(); ns.Add("atom", "w3.org/2005/Atom"); serializer.Serialize(xmlWriter, _rss, ns); 它只是将 xmlns:atom="w3.org/2005/Atom" 作为属性添加到我的根元素中......但没有我的 标签的前缀
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-01-30
    • 2018-12-30
    • 2011-02-12
    • 2023-03-25
    • 2020-03-15
    • 2021-08-16
    • 1970-01-01
    相关资源
    最近更新 更多