我试图建立一个网站地图使用皇宫Xml,但是遇到了一个空的名字空间属性,我想摆脱。例如

XNamespace ns = "http://www.sitemaps.org/schemas/sitemap/0.9";

XDocument xdoc = new XDocument(new XDeclaration("1.0", "utf-8", "true"),
    new XElement(ns + "urlset",

    new XElement("url",
        new XElement("loc", "http://www.example.com/page"),
        new XElement("lastmod", "2008-09-14"))));

结果是...

<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
  <url xmlns="">
    <loc>http://www.example.com/page</loc>
    <lastmod>2008-09-14</lastmod>
  </url>
</urlset>

我宁愿没有在=""网址元。我可以带它出采用替代的最终xdoc.ToString(),但是有一个更加正确的方式?

有帮助吗?

解决方案

将"更加正确的方式"将是:

XDocument xdoc = new XDocument(new XDeclaration("1.0", "utf-8", "true"),
new XElement(ns + "urlset",
new XElement(ns + "url",
    new XElement(ns + "loc", "http://www.example.com/page"),
    new XElement(ns + "lastmod", "2008-09-14"))));

同样作为你的代码,但与"ns+"之前的每一个元素名称需要在该网站地图名称空间。它的足够聪明,不把任何不必要的名字空间的声明中得到的XML,因此结果是:

<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
  <url>
    <loc>http://www.example.com/page</loc>
    <lastmod>2008-09-14</lastmod>
  </url>
</urlset>

这是,如果我没有记错的话,你想要什么。

其他提示

我偶然发现了这个职位的同时处理一个类似的问题VB.NET.我是使用XML文字和我花了一些搜索找出如何使这个解决方案的工作有XML文字的建设,而不仅仅是功能建筑。

该方案是进口的XML空间名在顶部的文件。

Imports <xmlns:ns="x-schema:tsSchema.xml">

然后前缀我的所有XML文本在查询表,与进口的名字空间。这消除了空洞的名称空间是上出现元素的时候我救了我的输出。

Dim output As XDocument = <?xml version="1.0" encoding="utf-8"?>
                              <XML ID="Microsoft Search Thesaurus">
                                  <thesaurus xmlns="x-schema:tsSchema.xml">
                                      <diacritics_sensitive>0</diacritics_sensitive>
                                      <%= From tg In termGroups _
                                          Select <ns:expansion>
                                                     <%= From t In tg _
                                                         Select <ns:sub><%= t %></ns:sub> %>
                                                 </ns:expansion> %>
                                  </thesaurus>
                              </XML>

    output.Save("C:\thesaurus.xml")

我希望这可以帮助别人。尽管在路上颠簸这样,XLinq API是非常凉爽。

如果其中一个元件使用的名字空间,它们都必须使用一个。如果你不限定一个在自己的本框架将增加一个空的名字空间,因为你有注意到。而且,遗憾的是,没有开关或类似的东西来抑制这种"功能"。

因此,似乎没有更好的方法来带出来。使用 替换("在=\"\"", "") 可能会有点快于执行RegEx.

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top