C# XML名称空间格式不正确

C# XML名称空间格式不正确,c#,xml,linq-to-xml,C#,Xml,Linq To Xml,构建XML XDocument以推送到web服务,根元素需要名称空间值这就是XML表单的外观 <shipment-feed xmlns="http://seller.marketplace.sears.com/oms/v5" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://seller.marketplace.sears.com/oms/v5 asn.xsd "> &

构建XML XDocument以推送到web服务,根元素需要名称空间值这就是XML表单的外观

<shipment-feed xmlns="http://seller.marketplace.sears.com/oms/v5" 

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://seller.marketplace.sears.com/oms/v5 asn.xsd ">
<shipment>
<header>
<asn-number>00601780002</asn-number>
<po-number>0060180</po-number>
<po-date>2009-09-26</po-date>
</header>
<detail>
<tracking-number>UPS1XXX</tracking-number>
<ship-date>2001-01-01</ship-date>
<shipping-carrier>UPS</shipping-carrier>
<shipping-method>GROUND</shipping-method>
<package-detail>
<line-number>1</line-number>
<item-id>AB12345678912345456789123456789CD</item-id>
<quantity>1</quantity>
</package-detail>
</detail>
</shipment>
</shipment-feed>
第一个问题是第一个子节点,我不知道它来自哪里,因为在foreach循环之前,该节点甚至都没有声明。我的印象是,我只是在向根元素添加属性


另一个问题是删除xml声明这类事情就是问题所在:

new XElement("shipment", ...)
您希望
装运
元素位于
中http://seller.marketplace.sears.com/oms/v5“
namespace-因此您需要将其显式化。这不会直接显示在结果XML中,因为它们将作为根目录中指定的默认名称空间继承该名称空间。基本上,无论在何处创建元素,都可能希望使用
ns1
。因此:

new XElement(ns1 + "shipment", new XElement(ns1 + "header", ...), ...)
要进一步了解为什么需要这样做,您应该阅读XML名称空间规范中的

另一个问题是删除xml声明

因此,在
XDocument
中添加一个:

XDocument doc = new XDocument(new XDeclaration("1.0", "utf-8", "yes"))

谢谢Jon的链接。从sears api faq页面的xml示例表单中,它没有显示xml声明,因此我没有在文档中添加XDeclaration,但它显示为默认值。我要做的是完全按照示例中所示获取文件。@zerodoc:如果XML声明真的是一个问题,我会非常惊讶。好的,谢谢,顺便说一句,将名称空间添加到所有Xelement中摆脱了。只是想在我向sears提出无法上载xml文档的问题之前,确保我的xml文档的格式正确。@zerodoc:这不是真正的格式问题,而是元素所在名称空间的语义问题。很高兴它对你有用。
new XElement(ns1 + "shipment", new XElement(ns1 + "header", ...), ...)
XDocument doc = new XDocument(new XDeclaration("1.0", "utf-8", "yes"))