【发布时间】:2016-04-05 15:52:01
【问题描述】:
我正在尝试使用 xDocument 以 xml 格式发送 UPSAPI 请求。但由于某种原因,我在尝试制作 xml 时遇到错误??我得到了错误:
非空白字符不能添加到内容中。
在字符串生成器本身上,而不是在特定区域。所以我不知道它的失败之处。代码如下:
var requestXml = new XDocument(
new XDeclaration("1.0", "utf-16", "yes"),
new XElement("AccessRequest",
new XAttribute(XNamespace.Xml + "lang", "en"),
new XElement("AccessLicenseNumber", "LICENCE"),
new XElement("UserId", "USERID"),
new XElement("Password", "PASSWORD")),
new XDeclaration("1.0", "utf-16", "yes"),
new XElement("RatingServiceSelectionRequest",
new XAttribute(XNamespace.Xml + "lang", "en"),
new XElement("Request",
new XElement("TransactionReference",
new XElement("CustomerContext", "Rating and Service"),
new XElement("XpciVersion", "1.0001")),
new XElement("RequestAction", "Rate"),
new XElement("RequestOption", "Rate")),
new XElement("PickupType",
new XElement("Code", "01"),
new XElement("Description", "Daily Pickup")),
new XElement("Shipment",
new XElement("Shipper",
new XElement("Address",
new XElement("PostalCode", "33706"),
new XElement("CountryCode", "US"))),
new XElement("ShipTo",
new XElement("Address",
new XElement("ResidentialAddressIndicator", ""), //GET from postObject
new XElement("PostalCode", "34221"), //GET from postObject
new XElement("CountryCode", "US"))), //GET from postObject
new XElement("ShipFrom",
new XElement("Address",
new XElement("PostalCode", "33706"),
new XElement("CountryCode", "US"))),
new XElement("Service",
new XElement("Code", "03")), //GET from postObject
new XElement("Package",
new XElement("PackagingType",
new XElement("Code", "02")),
new XElement("Dimensions",
new XElement("UnitOfMeasurement",
new XElement("Code", "IN")),
new XElement("Length", "20"),
new XElement("Width", "20"),
new XElement("Height", "20")),
new XElement("PackageWeight",
new XElement("UnitOfMeasurement",
new XElement("Code", "LBS")),
new XElement("Weight", "10")))))); //GET from postObject
更新:
好的,所以消除了大部分代码我得到了错误:
此操作会创建结构不正确的文档。
用这个:
var requestXml = new XDocument(
new XDeclaration("1.0", "utf-8", "yes"),
new XElement("AccessRequest",
new XAttribute(XNamespace.Xml + "lang", "en"),
new XElement("AccessLicenseNumber", "LICENCE"),
new XElement("UserId", "USERID"),
new XElement("Password", "PASSWORD")),
new XElement("RatingServiceSelectionRequest", "this"));
字面意思是这样的:
<?xml version="1.0" encoding="UTF-16"?>
<AccessRequest xml:lang="en-US">
<AccessLicenseNumber>LICENCE</AccessLicenseNumber>
<UserId>USERID</UserId>
<Password>PASSWORD</Password>
</AccessRequest>
<RatingServiceSelectionRequest>this</RatingServiceSelectionRequest>
结构不正确怎么办?我错过了什么吗?
【问题讨论】:
-
你不能有多个根元素。
-
为什么不尝试删除 xml 的部分,直到它再次开始运行。这将帮助您缩小导致问题的部分
-
那么他们需要非法的、毫无意义的 XML,您应该向他们投诉。或者他们只是想要连接两个有效文档,这仍然是错误的。
-
正如 SLaks 所说,一个 XML 文档必须只有一个根元素。你的会有两个,这是不允许的。见en.wikipedia.org/wiki/Root_element。
-
是的,我现在明白了。我以为这只是声明。但是是的,UPSAPI 两者都需要。所以我必须将它们连接到两个单独的 XDocument 中才能发布到 UPS。我会发布一个答案,我想通了。