提问人:user3858890 提问时间:10/2/2019 最后编辑:jdwenguser3858890 更新时间:9/25/2022 访问量:1447
前缀 “ 不能在同一起始元素标记中从 ” 重新定义为 <url>
The prefix “ cannot be redefined from ” to <url> within the same start element tag
问:
我正在创建一个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>
前缀“cannot be redefined from”到“http://www.w3.org/2005/Atom”在同一起始元素标记中
我尝试更改 的顺序,或者稍后使用方法添加属性,但没有任何效果。attributes
.Add()
关于如何解决此错误的任何想法? 谢谢!
答:
1赞
jdweng
10/2/2019
#1
试着省去很多麻烦。试试这个:
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")
})
})
);
评论
0赞
user3858890
10/3/2019
谢谢你的回答!!您确实帮助我解决了我的问题,我确实修改了代码以实现我的目标,但现在有一个新问题。标签 ,现在有一个我不想要的属性。下面是 XML 输出。你能帮帮我吗?<entry>
xmlns=""
<entry xmlns=""> ... </entry>
0赞
jdweng
10/3/2019
网络库要求默认命名空间(没有前缀)是最后一个。当它不是原始代码中的最后一个时,我看到了异常问题。不确定此错误是否已在 Net 中修复。
0赞
Raphael
9/25/2022
#2
在更改 XElement 的命名空间后尝试序列化 XNode 时,也会发生此错误,例如通过设置删除它el
el.Name = XNamespace.None + el.Name.LocalName;
(如果 的命名空间是由属性定义的,例如 .)el
xmlns="{uri}"
<element xmlns="{uri}" />
在这种情况下,我发现的一个解决方案是同时删除 XAttribute 命名空间声明。
el.Attributes("xmlns").Remove();
(或类似,请注意,此附加行不会更改任何元素的实际命名空间,但它可能会更改命名空间在文档中的声明方式。
出现此问题似乎是因为 .Net XML 序列化程序“不够智能”,无法在某些情况下处理(更改的)命名空间,其中命名空间声明作为 XAttribute 显式存在(当 XNode 从包含命名空间声明的 XML 反序列化时,就是这种情况)。
评论