簡體   English   中英

C#XML-為什么此代碼始終失敗並顯示0x3A錯誤?

[英]C# XML - Why does this Code keep failing with 0x3A Error?

我有以下代碼示例:

PlentySoapRequest_GetAuthentificationToken username = new PlentySoapRequest_GetAuthentificationToken();

        username.Username = user_textbox.ToString();
        username.Userpass = password_textbox.ToString();

        Uri uri = new Uri("http://www.****.de/plenty/api/soap/version105/");


        XNamespace soapenv = @"http://schemas.xmlsoap.org/soap/envelope/";
        XNamespace xsi = @"http://www.w3.org/2001/XMLSchema-instance";
        XNamespace xsd = @"http://www.w3.org/2001/XMLSchema";
        XNamespace ver = @"http://www.****.de/plenty/api/soap/version105/";

        var document = new XDocument(
           new XDeclaration("1.0", "utf-8", String.Empty),
           new XElement(soapenv + "Envelope",
               new XAttribute(XNamespace.Xmlns + "xsi", xsi),
               new XAttribute(XNamespace.Xmlns + "xsd" , xsd),
               new XAttribute(XNamespace.Xmlns + "soapenv" , soapenv),
               new XAttribute(XNamespace.Xmlns + "ver" , ver),
           new XElement(soapenv + "Header"),
           new XElement(soapenv + "Body",
                   new XElement(ver + "GetAuthentificationToken",
                        new XElement("oLogin" + xsi + "type" + ver + "PlentySoapRequest_GetAuthentificationToken",
                            new XAttribute("Username" + xsi + "type" + xsd + "string", username.Username),
                            new XAttribute("Userpass" + xsi + "type" + xsd + "string", username.Userpass)
                           )
                        )
                    )
                )
               );

我在第一行中一直收到錯誤消息。 “plentysoaprequest ......”

The ':' character, hexadecimal value 0x3A, cannot be included in a name.

如果我注釋掉這些行,它總是說它在代碼的第一行。

編輯: xml應如下所示:

<soapenv:Body>
  <ver:GetAuthentificationToken>
     <oLogin xsi:type="ver:PlentySoapRequest_GetAuthentificationToken">
        <!--You may enter the following 2 items in any order-->
        <Username xsi:type="xsd:string">apitest</Username>
        <Userpass xsi:type="xsd:string">apitest</Userpass>
     </oLogin>
  </ver:GetAuthentificationToken>

因此xml-sysntax似乎有問題。 我不知道如何設置xsi:typexsi:type

"oLogin" + xsi + "type"將創建一個值為"oLoginhttp://www.w3.org/2001/XMLSchema-instancetype"的字符串。 這不是有效的名字...

您需要一些更接近此的東西:

var document = new XDocument(
   new XDeclaration("1.0", "utf-8", String.Empty),
   new XElement(soapenv + "Envelope",
       new XAttribute(XNamespace.Xmlns + "xsi", xsi),
       new XAttribute(XNamespace.Xmlns + "xsd", xsd),
       new XAttribute(XNamespace.Xmlns + "soapenv", soapenv),
       new XAttribute(XNamespace.Xmlns + "ver", ver),
   new XElement(soapenv + "Header"),
   new XElement(soapenv + "Body",
           new XElement(ver + "GetAuthentificationToken",
                new XElement(xsi + "Login", 
                    new XAttribute(xsi + "type", "blahblah"),
                    new XElement("Username",
                        new XAttribute(xsi + "type", "xsd:string"),
                                "myUserName")
                   )
                )
            )
        )
       );

哪個生成這個XML

<soapenv:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ver="http://www.****.de/plenty/api/soap/version105/">
  <soapenv:Header />
  <soapenv:Body>
    <ver:GetAuthentificationToken>
      <xsi:Login xsi:type="blahblah">
        <Username xsi:type="xsd:string">myUserName</Username>
      </xsi:Login>
    </ver:GetAuthentificationToken>
  </soapenv:Body>
</soapenv:Envelope>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM