Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/asp.net-mvc-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 不能使用XDocument和UPS API将非空白字符添加到内容中_C#_Xml_Ups - Fatal编程技术网

C# 不能使用XDocument和UPS API将非空白字符添加到内容中

C# 不能使用XDocument和UPS API将非空白字符添加到内容中,c#,xml,ups,C#,Xml,Ups,我正在尝试使用xDocument以xml格式发送UPSAPI请求。但是由于某些原因,我甚至在尝试生成xml时都遇到了一个错误??我得到了一个错误: 无法将非空白字符添加到内容中 在字符串生成器本身上,并且不在任何特定区域。所以我不知道它在哪里失败。代码如下: var requestXml = new XDocument( new XDeclaration("1.0", "utf-16", "yes"), new XElement("

我正在尝试使用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>

许可证
用户ID
密码
这

它的结构如何不正确?我遗漏了什么吗?

XDocument不允许如上所述的多个根。但是UPS shipping API需要两个根,一个用于许可证验证请求,另一个用于计算请求。因此,我必须将这两个字符串分开:

        //Licence verification:
        var accessXML = 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")));

        //Shipping request:
        var serviceXML = new XDocument(    
            new XDeclaration("1.0", "utf-8", "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("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



        //Combine the strings and POST
        var requestXml = accessXML.ToString() + serviceXML.ToString();

现在一切正常。

您不能有多个根元素。为什么不尝试删除xml的部分,直到它再次开始运行。这将帮助您缩小导致问题的范围,然后他们需要非法、无意义的XML,您应该向他们投诉。或者他们只需要将两个有效文档连接起来,这仍然是错误的。你的会有两个,这是不允许的。看,是的,我现在明白了。我以为这只是声明。但是是的,这两者都需要。因此,我必须将它们连接到两个单独的XDocument中,才能发布到UPS。我会发布一个答案,我知道了。