【问题标题】:How to create XElement with namespaces如何使用命名空间创建 XElement
【发布时间】:2023-03-14 02:53:01
【问题描述】:

我需要像这样生成xml:

<urlset xmlns:video="http://www.google.com/schemas/sitemap-video/1.1"  xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
<url>
   <loc>http://blabla</loc>
   <video:video>
     <video:player allow_embed="yes">http://blablabla</video:player_loc>      
   </video:video>
</url>

我不知道如何使用命名空间。我什至无法正确创建urlset 元素,我正在尝试:

 XNamespace _defaultNamespace = "http://www.sitemaps.org/schemas/sitemap/0.9";
 XNamespace _videoNameSpace = "http://www.google.com/schemas/sitemap-video/1.1";

 new XElement("urlset",new XAttribute(_defaultNamespace+"video",_defaultNamespace))

它会生成:

<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<urlset p1:video="http://www.sitemaps.org/schemas/sitemap/0.9" xmlns:p1="http://www.sitemaps.org/schemas/sitemap/0.9">

p1 是什么东西?

【问题讨论】:

  • 向我们展示您的尝试。

标签: c# xml xml-namespaces xelement


【解决方案1】:

命名空间属性在 xmlns 命名空间中,所以你应该使用 XNamespace.Xmlns+ attributeName 用于声明命名空间:

XNamespace ns = "http://www.sitemaps.org/schemas/sitemap/0.9";
XNamespace video = "http://www.google.com/schemas/sitemap-video/1.1";
var urlset = new XElement(ns + "urlset",                
    new XAttribute(XNamespace.Xmlns + "video", video));

生产

<urlset xmlns:video="http://www.google.com/schemas/sitemap-video/1.1" 
        xmlns="http://www.sitemaps.org/schemas/sitemap/0.9" />

完整的 xml 生成将如下所示:

var urlset = new XElement(ns + "urlset",                
    new XAttribute(XNamespace.Xmlns + "video", video),
    new XElement(ns + "url",
        new XElement(ns + "loc", "http:/blabla"),
        new XElement(video + "video",
            new XElement(video + "player",
                new XAttribute("allow_embed", "yes"),
                "http:/blabla"))));

【讨论】:

    猜你喜欢
    • 2011-06-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-19
    • 1970-01-01
    • 1970-01-01
    • 2019-12-26
    • 2010-11-23
    相关资源
    最近更新 更多