Проблема как элемент «ImageParameters» не может содержать дочерний элемент «ImageParameter»

Я пытаюсь создать метку usps с 4x6, но столкнулся с этой проблемой. Может ли кто-нибудь помочь мне с созданием 4x6Label.

Также я попытался изменить версию с DeliveryConfirmationV3 на DeliveryConfirmationV4, но все равно не генерируется 4x6Label.

Мой запрос xml проходит как

https://secure.shippingapis.com/ShippingAPI.dll?API=DeliveryConfirmationV3&XML=<DeliveryConfirmationV3.0Request USERID="xxxxx" PASSWORD="xxxxxx">
<Option>1</Option>
<ImageParameters>
    <ImageParameter>4X6LABEL</ImageParameter>
</ImageParameters>
<FromName>Mitesh1 Jain1</FromName>
<FromFirm></FromFirm>
<FromAddress1>52 NORMANDY RD</FromAddress1>
<FromAddress2>QWE</FromAddress2>
<FromCity>MARLTON</FromCity>
<FromState>NJ</FromState>
<FromZip5>08053</FromZip5>
<FromZip4></FromZip4>
<ToName>DISCRETE JRC,LLC</ToName>
<ToFirm></ToFirm>
<ToAddress1>110 South 8th Street</ToAddress1>
<ToAddress2>Suite 104</ToAddress2>
<ToCity>Philadelphia</ToCity>
<ToState>PA</ToState>
<ToZip5>15001</ToZip5>
<ToZip4></ToZip4>
<WeightInOunces>1</WeightInOunces>
<ServiceType>Priority</ServiceType>
<POZipCode></POZipCode>
<ImageType>PDF</ImageType>
<LabelDate></LabelDate>
<CustomerRefNo></CustomerRefNo>
<AddressServiceRequested>False</AddressServiceRequested>
<SenderName></SenderName>
<SenderEMail></SenderEMail>
<RecipientName></RecipientName>
<RecipientEMail></RecipientEMail>
</DeliveryConfirmationV3.0Request>

но я получаю ошибку как

<?xml version="1.0" encoding="utf-8"?>
<Error>
<Number>-2147221202</Number>
<Source>Common:XmlParse</Source>
<Description>The element 'ImageParameters' cannot contain child element 'ImageParameter' because the parent element's content model is text only.</Description>
 <HelpFile/>
 <HelpContext/>

Сначала все работало отлично, но после прохождения

<ImageParameter>4X6LABEL</ImageParameter>

эта проблема возникает

В настоящее время мой код такой

   public Package GetDeliveryConfirmationLabel(Package package)
{
    string labeldate = package.ShipDate.ToShortDateString();
    if (package.ShipDate.ToShortDateString() == DateTime.Now.ToShortDateString()) 
        labeldate = "";
       string url= "https://secure.shippingapis.com/ShippingAPI.dll?API=PriorityMailIntlCertify&XML= <PriorityMailIntlCertifyRequest USERID=\"XXXXX\"> <Option></Option> <Revision>2</Revision> <ImageParameters> <ImageParameter>4X6LABEL</ImageParameter> </ImageParameters> <FromFirstName>Garth</FromFirstName> <FromMiddleInitial>A</FromMiddleInitial> <FromLastName>Brooks</FromLastName> <FromFirm>Garths Firm</FromFirm> <FromAddress1>radlab</FromAddress1> <FromAddress2>6406 Ivy Lane</FromAddress2> <FromUrbanization>Garys Urbanization</FromUrbanization> <FromCity>Greenbelt</FromCity> <FromState>MD</FromState> <FromZip5>20770</FromZip5> <FromZip4>1234</FromZip4> <FromPhone>3019187658</FromPhone> <FromCustomsReference> From Customs Ref.</FromCustomsReference> <ToName></ToName> <ToFirstName>Reza</ToFirstName> <ToLastName>Dianat</ToLastName> <ToFirm>HP</ToFirm> <ToAddress1>HP</ToAddress1> <ToAddress2>5th floor</ToAddress2> <ToAddress3>6406 Flower Lane</ToAddress3> <ToCity>Greenbelt</ToCity> <ToProvince>Md</ToProvince> <ToCountry>Canada</ToCountry> <ToPostalCode>20770</ToPostalCode> <ToPOBoxFlag>N</ToPOBoxFlag> <ToPhone>5555555555</ToPhone> <ToFax>3012929999</ToFax> <ToEmail>[email protected]</ToEmail> <ToCustomsReference>Import Reference</ToCustomsReference> <NonDeliveryOption>Return</NonDeliveryOption> <Container>MDFLATRATEBOX</Container> <ShippingContents> <ItemDetail> <Description>Description 1</Description> <Quantity>1</Quantity> <Value>1.11</Value> <NetPounds>1</NetPounds> <NetOunces>1</NetOunces> <HSTariffNumber>123456789123</HSTariffNumber> <CountryOfOrigin>Brazil</CountryOfOrigin> </ItemDetail> <ItemDetail> <Description>Description 2</Description> <Quantity>2</Quantity> <Value>2.22</Value> <NetPounds></NetPounds> <NetOunces>2</NetOunces> <HSTariffNumber>234567</HSTariffNumber> <CountryOfOrigin>Switzerland</CountryOfOrigin> </ItemDetail> <ItemDetail> <Description>Description 3</Description> <Quantity>3</Quantity> <Value>3.33</Value> <NetPounds></NetPounds> <NetOunces>3</NetOunces> <HSTariffNumber>123456789123</HSTariffNumber> <CountryOfOrigin>Brazil</CountryOfOrigin> </ItemDetail> <ItemDetail> <Description>Description 4</Description> <Quantity>4</Quantity> <Value>4.44</Value> <NetPounds></NetPounds> <NetOunces>4</NetOunces> <HSTariffNumber>234567234567</HSTariffNumber> <CountryOfOrigin>Switzerland</CountryOfOrigin> </ItemDetail> </ShippingContents> <Insured>N</Insured> <InsuredNumber>90123</InsuredNumber> <InsuredAmount>99.90</InsuredAmount> <GrossPounds>3</GrossPounds> <GrossOunces>8</GrossOunces> <ContentType>Documents</ContentType> <ContentTypeOther>and Other</ContentTypeOther> <Agreement>Y</Agreement> <Comments>PriorityMailIntl Comments</Comments> <LicenseNumber>Lic 123</LicenseNumber> <CertificateNumber>Cert456</CertificateNumber> <InvoiceNumber>Inv890</InvoiceNumber> <ImageType>TIF</ImageType> <ImageLayout>TRIMONEPERFILE</ImageLayout> <CustomerRefNo>Cust Ref123</CustomerRefNo> <POZipCode>20770</POZipCode> <LabelDate></LabelDate> <HoldForManifest>N</HoldForManifest> <EELPFC>802.11B</EELPFC> <CommercialPrice></CommercialPrice> <Size></Size> <Length></Length> <Width></Width> <Height></Height> <Girth></Girth> <ExtraServices> <ExtraService></ExtraService> </ExtraServices> </PriorityMailIntlCertifyRequest>"; 

     string xml = web.DownloadString(url);
    if (xml.Contains("<Error>"))
    {
        int idx1 = xml.IndexOf("<Description>") + 13;
        int idx2 = xml.IndexOf("</Description>");
        int l = xml.Length;
        string errDesc = xml.Substring(idx1, idx2 - idx1);
        package.Error = errDesc;
        //throw new USPSManagerException(errDesc);
    }
    else
    {
         int i1 = xml.IndexOf("<LabelImage>") + "<LabelImage>".Length;
         int i2 = xml.IndexOf("</LabelImage>");
         package.ShippingLabel = Convert.FromBase64String(xml.Substring(i1, i2 - i1));

         XmlDocument xmldoc = new XmlDocument();
         xmldoc.LoadXml(xml);
         XmlNodeList nodeList = xmldoc.GetElementsByTagName("LabelImage");
        string _DeliveryConfirmationNumber = string.Empty;
        foreach (XmlNode node in nodeList)
        {
            _DeliveryConfirmationNumber = node.InnerText;
        }
        package.ReferenceNumber = _DeliveryConfirmationNumber;
    }
    return package;
}   

Я обновил приведенный выше код, но у меня возникает проблема, поскольку

введите здесь описание изображения

Приставка

введите здесь описание изображения


person Community    schedule 21.08.2017    source источник
comment
сообщение об ошибке содержит подсказку, модель содержимого является только текстом, что означает, что параметры изображения должны быть включены либо как атрибуты, либо как содержимое тега ‹imageparameters›, например <imageparameters attributex="4X6LABEL"></imageparameters> или <imageparameters>4X6LABEL</imageparameters>. у вас есть xsd или документация для этого API, где это должно быть объяснено?   -  person Cee McSharpface    schedule 21.08.2017
comment
@dlatikay Я просмотрел usps.com /business/web-tools-apis/ и добавлен параметр изображения   -  person    schedule 21.08.2017
comment
Вот и я тоже увидел, вы правы, в их образце именно так, как у вас. Похоже на конфликт версий API.   -  person Cee McSharpface    schedule 21.08.2017
comment
вам нужно указать <Revision>2</Revision> по состоянию на январь 2011 года... должно идти прямо под тегом <Option></Option>. это, вероятно, своего рода маркер, который говорит хосту применить более новую версию схемы.   -  person Cee McSharpface    schedule 21.08.2017
comment
@dlatikay Я добавил это, но получаю сообщение об ошибке, поскольку элемент «DeliveryConfirmationV3.0Request» имеет недопустимый дочерний элемент «Редакция». Ожидается список возможных элементов: 'ImageParameters'.   -  person    schedule 21.08.2017
comment
ни один из образцов никогда не использует этот параметр. извините, нет идей. единственное, что я мог сделать, это проголосовать за вопрос, возможно, кто-то с большим опытом работы с этой версией 3 может внести свой вклад. выводы: usps.com/business/web-tools-apis/, remoteinternetsolutions.com/programming/usps-xml-api   -  person Cee McSharpface    schedule 21.08.2017
comment
Почему у вас есть API=DeliveryConfirmationV3? Я совсем не знаком с темой, но при поиске темы нашел следующее: usps.com/business/web-tools-apis/ и упоминает только API=eVS и API=eVSCertify. Можете ли вы добавить ссылку на документацию, в которой упоминается API=DeliveryConfirmationV3?   -  person grek40    schedule 28.08.2017
comment
Только что просмотрел ваш комментарий от 21 августа. Там вы ссылаетесь на документацию для API=PriorityMailIntl, так что не ожидайте, что он будет работать без использования этого API;)   -  person grek40    schedule 28.08.2017
comment
@ grek40 Я обновил свой вопрос и отправил полный код, который в настоящее время создает метку usps. Теперь, если мне нужно использовать API=PriorityMailIntl, то что и какие изменения мне нужно сделать? Не могли бы вы помочь мне   -  person    schedule 30.08.2017
comment
Цитирую себя: Я совсем не знаком с этой темой. Просто убедитесь, что вы следуете одному источнику документации, используете API, на который он ссылается, и используете задокументированные узлы xml. Если вы начнете смешивать API 1 с атрибутами из API 2, вы обязательно столкнетесь с проблемами.   -  person grek40    schedule 31.08.2017
comment
@grek40 grek40 Я обновил вопрос, передав его с помощью PriorityMailIntl, но теперь я получаю сообщение об ошибке в package.ShippingLabel = Convert.FromBase64String(xml.Substring(i1, i2 - i1));   -  person    schedule 31.08.2017
comment
Вам следует подумать об удалении вашего UserID здесь и в другом вопросе... насколько я могу судить, это конфиденциальная информация, и USPS требует, чтобы вы не разглашали ее. Свяжитесь с модератором, чтобы избавиться от этой информации и в истории изменений вопроса.   -  person grek40    schedule 31.08.2017


Ответы (1)


По исходной проблеме:

4X6LABEL недоступен для DeliveryConfirmationV3 API. Чтобы использовать эту опцию, выберите API, который ее поддерживает. (вы должны выбрать между PriorityMailIntl и eVS среди прочего, в зависимости от ваших потребностей)

Ваш обновленный код:

Вы указываете <ImageType>TIF</ImageType> по какой-то причине, но похоже, что вы пытаетесь использовать возвращенные данные как PDF. Попробуйте сохранить и открыть их в формате TIF, чтобы проверить свои текущие результаты, и попробуйте изменить запрошенный ImageType в PDF, чтобы получить, вероятно, желаемый результат.

person grek40    schedule 31.08.2017