首页 > 解决方案 > 前缀“不能从”重新定义为在同一个起始元素标签内

问题描述

我正在创建一个 XML 文件,如下例所示,我尝试一个 xmlns属性添加到<feed>标签中,但它给了我一个错误:

<feed xmlns="http://www.w3.org/2005/Atom" xmlns:g="http://base.google.com/ns/1.0">

这是我尝试创建的完整 XML 文件的格式:

    <feed xmlns="http://www.w3.org/2005/Atom" xmlns:g="http://base.google.com/ns/1.0">
<title>Glowbox</title>
<link rel="self" href="https://glowbox.gr/"/>
<entry>
 <g:id>
  <![CDATA[ 4248 ]]>
 </g:id>
 <g:mpn>
  <![CDATA[ BLS054 ]]>
 </g:mpn>
 <g:title>
  <![CDATA[ Body Mist Summer Tales ]]>
 </g:title>
 <g:product_type/>
 <g:google_product_category>
  <![CDATA[ ]]>
 </g:google_product_category>
 <g:price>
  <![CDATA[ 13.5 EUR ]]>
 </g:price>
 <g:custom_label_1>
  <![CDATA[ no ]]>
 </g:custom_label_1>
 <g:image_link>
  <![CDATA[ https://glowbox.gr/7798/body-mist-summer-tales.jpg ]]>
 </g:image_link>
 <g:condition>new</g:condition>
 <g:link>
  <![CDATA[
   https://glowbox.gr/home/4248-body-mist-summer-tales.html
  ]]>
 </g:link>
 <g:description>
  <![CDATA[
  Aναζωογονητικό και ενυδατικό mist σώματος με εκχύλισμα αλόης και χαμομηλιού σε καταπληκτικά 
  αρώματα! 
  ]]>
 </g:description>
 <g:brand>
  <![CDATA[ BLUE SCENTS ]]>
 </g:brand>
 <g:availability>
  <![CDATA[ in stock ]]>
 </g:availability>
</entry>

我用所有标签创建一个类似的 XML 文件的代码是这样的:

XDocument xdoc;
        XNamespace gw = "http://base.google.com/ns/1.0";
        xdoc = new XDocument(
                new XDeclaration("1.0", "", ""),
                new XElement("feed", new XAttribute("xmlns", "http://www.w3.org/2005/Atom"), new XAttribute(XNamespace.Xmlns + "g", "http://base.google.com/ns/1.0"),
                        new XElement("title", "Newcult"),
                        new XElement("link", new XAttribute("href", "http://www.newcult.gr"), new XAttribute("rel", "self")),
                            new XElement("entry",
                                new XElement(gw + "id", "<![CDATA[ 1 ]]>"),
                                new XElement(gw + "title", "2"),
                                new XElement(gw + "description", "3"),
                                new XElement(gw + "link", "4"),
                                new XElement(gw + "image_link", "5"),
                                new XElement(gw + "brand", "6"),
                                new XElement(gw + "gender", "7"),
                                new XElement(gw + "product_type", "8"),
                                new XElement(gw + "condition", "new"),
                                new XElement(gw + "availability", "in stock"),
                                new XElement(gw + "price", " EUR"),
                                new XElement(gw + "sale_price", " EUR"),
                                new XElement(gw + "google_product_category", "1")
                            )
                  )
                );

但是,当我运行它时,它给了我第一个标签attribute的错误:<feed>

前缀“不能从”到“ http://www.w3.org/2005/Atom ”在同一个开始元素标签内

我曾尝试更改 , 的顺序attributes或稍后使用.Add()方法添加属性,但没有任何效果。

关于如何解决此错误的任何想法?谢谢!

标签: c#asp.netxmlnamespaces

解决方案


尝试省去很多麻烦。试试这个 :

           string header = "<?xml version=\"1.0\" encoding=\"utf-8\" ?>" +
                "<feed xmlns:gw=\"http://base.google.com/ns/1.0\" xmlns=\"http://www.w3.org/2005/Atom\" xmlns:g=\"http://base.google.com/ns/1.0\">" +
                "</feed>";


            XDocument xdoc = XDocument.Parse(header);
            XElement feed = xdoc.Root;
            XNamespace gw = feed.GetNamespaceOfPrefix("gw");
            XNamespace g = feed.GetNamespaceOfPrefix("g");
            XNamespace ns = feed.GetDefaultNamespace();

            feed.Add(new XElement(ns + "title", "Newcult" ),
                    new XElement(ns + "link", new object[] {
                        new XAttribute("href", "http://www.newcult.gr"), 
                        new XAttribute("rel", "self"),
                        new XElement(ns + "entry", new object[] {
                            new XElement(gw + "id", "<![CDATA[ 1 ]]>"),
                            new XElement(gw + "title", "2"),
                            new XElement(gw + "description", "3"),
                            new XElement(gw + "link", "4"),
                            new XElement(gw + "image_link", "5"),
                            new XElement(gw + "brand", "6"),
                            new XElement(gw + "gender", "7"),
                            new XElement(gw + "product_type", "8"),
                            new XElement(gw + "condition", "new"),
                            new XElement(gw + "availability", "in stock"),
                            new XElement(gw + "price", " EUR"),
                            new XElement(gw + "sale_price", " EUR"),
                            new XElement(gw + "google_product_category", "1")
                        })
                    })
             );

推荐阅读