2016-06-28 6 views
2

Ich bin neu in C#Wie kann ich XML-Wert übergeben als String aus Textfeld

Ich habe einen Textbereich, wo meine Eingabedatei wäre analysieren:

<?xml version="1.0" encoding="ISO-8859-1"?> 
<DespatchAdvice> 
<DespatchAdviceHeader> 
<DespatchAdviceNumber>40H2YZT11100510</DespatchAdviceNumber> 
<CustomerPO>1424540</CustomerPO> 
</DespatchAdviceHeader> 
<IMAccountNumber>MD40111111</IMAccountNumber> 
<ShipToSuffix>000</ShipToSuffix> 
<DateHeader> 
<Date Type="Document">20100510</Date> 
<Date Type="Despatch">20100421</Date> 
<Date Type="Delivery">20100426</Date> 
<Date Type="Order">20100421</Date> 
</DateHeader> 
<Address Type="ShipFrom"> 
<Name>INGRAM MICRO</Name> 
<AddressLine1>12510 MICRO DRIVE</AddressLine1> 
<City>MIRA LOMA</City> 
<State>CA</State> 
<PostalCode>917520000</PostalCode> 
</Address> 
<Address Type="ShipTo"> 
<Name>NAVAL HOSPITAL</Name> 
<Attention>ATTN Ms. Smith</Attention> 
<AddressLine1>CODE 33 M82CG65</AddressLine1> 
<AddressLine2>2222 N Willow ST</AddressLine2> 
<City>Willowville</City> 
<State>CA</State> 
<PostalCode>902100000</PostalCode> 
<CountryCode>US</CountryCode> 
</Address> 
<ConsignmentHeader> 
<SequenceNumber>1</SequenceNumber> 
<NumberOfPackages>5</NumberOfPackages> 
<CarrierCode>RG</CarrierCode> 
<CarrierName>RPS Ground/FedEx Ground</CarrierName> 
<UniversalScacCode>RPSI</ UniversalScacCode> 
</ConsignmentHeader> 
<MeasurementHeader> 
<UnitOfMeasure>LBS</UnitOfMeasure> 
<Weight>165</Weight> 
</MeasurementHeader> 
<LineHeader> 
<LineItem LineNumber="1"> 
<Product SKU="M35621" DespatchQuantity="1"> 
<Item Type="UPC">0808736847162</Item> 
<ManufacturerSKU>Q8754A</ManufacturerSKU> 
<CustomerPartNumber>K1111111</CustomerPartNumber> 
<SKUDescription1>42IN X 200FT UNIVERSAL INSTANT-PAPR</SKUDescription1> 
<SKUDescription2>DRY GLOSS PHOTO PAPER</SKUDescription2> 
<SerialNumberHeader> 
<SerialNumber/> 
</SerialNumberHeader> 
</Product> 
<PackageHeader> 
<IdentificationHeader> 
<Identification TrackingNumber="1111111111111"/> 
</IdentificationHeader> 
</PackageHeader> 
</LineItem> 
<LineItem LineNumber="1"> 
<Product SKU="M35621" DespatchQuantity="1"> 
<Item Type="UPC">0808736847162</Item> 
<ManufacturerSKU>Q8754A</ManufacturerSKU> 
<CustomerPartNumber> K1111111</CustomerPartNumber> 
<SKUDescription1>42IN X 200FT UNIVERSAL INSTANT-PAPR</SKUDescription1> 
<SKUDescription2>DRY GLOSS PHOTO PAPER</SKUDescription2> 
<SerialNumberHeader> 
<SerialNumber/> 
</SerialNumberHeader> 
</Product> 
</LineItem> 
<LineItem LineNumber="1"> 
<Product SKU="M35621" DespatchQuantity="1"> 
<Item Type="UPC">0808736847162</Item> 
<ManufacturerSKU>Q8754A</ManufacturerSKU> 
<CustomerPartNumber> K1111111</CustomerPartNumber> 
<SKUDescription1>42IN X 200FT UNIVERSAL INSTANT-PAPR</SKUDescription1> 
<SKUDescription2>DRY GLOSS PHOTO PAPER</SKUDescription2> 
<SerialNumberHeader> 
<SerialNumber/> 
</SerialNumberHeader> 
</Product> 
<PackageHeader> 
<IdentificationHeader> 
<Identification TrackingNumber="3333333333333"/> 
</IdentificationHeader> 
</PackageHeader> 
</LineItem> 
<LineItem LineNumber="1"> 
<Product SKU="M35621" DespatchQuantity="1"> 
<Item Type="UPC">0808736847162</Item> 
<ManufacturerSKU>Q8754A</ManufacturerSKU> 
<CustomerPartNumber> K1111111</CustomerPartNumber> 
<SKUDescription1>42IN X 200FT UNIVERSAL INSTANT-PAPR</SKUDescription1> 
<SKUDescription2>DRY GLOSS PHOTO PAPER</SKUDescription2> 
<SerialNumberHeader> 
<SerialNumber/> 
</SerialNumberHeader> 
</Product> 
</LineItem> 
<LineItem LineNumber="1"> 
<Product SKU="M35621" DespatchQuantity="1"> 
<Item Type="UPC">0808736847162</Item> 
<ManufacturerSKU>Q8754A</ManufacturerSKU> 
<CustomerPartNumber> K1111111</CustomerPartNumber> 
<SKUDescription1>42IN X 200FT UNIVERSAL INSTANT-PAPR</SKUDescription1> 
<SKUDescription2>DRY GLOSS PHOTO PAPER</SKUDescription2> 
<SerialNumberHeader> 
<SerialNumber/> 
</SerialNumberHeader> 
</Product> 
<PackageHeader> 
<IdentificationHeader> 
<Identification TrackingNumber="5555555555555"/> 
</IdentificationHeader> 
</PackageHeader> 
</LineItem> 
</LineHeader> 
<TotalLinesShipped>5</TotalLinesShipped> 
</DespatchAdvice> 

Nun wollte ich diese Datei analysieren on fly, bedeutet, wenn ich es zurückgebe Sollte das XML, das als String analysiert wird, parsen und den Wert nach Bedarf speichern. Ich verstehe nicht, wie ich es erreichen kann. Der Code, den ich ausprobiert habe, ist dies und es lädt die Datei in einer XML-Datei wie gewünscht, aber es kommt in einer Zeile und codiert.

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Web; 
using System.Web.UI; 
using System.Web.UI.WebControls; 
using System.IO; 
using System.Text; 
using System.Threading; 

public partial class Services_Ingram_Test : System.Web.UI.Page 
{ 
    public Dictionary<string, List<string>> myCodes = new Dictionary<string, List<string>>(); 
    protected void Page_Load(object sender, EventArgs e) 
    { 
     if (Request.ContentLength > 0) 
     { 
      try 
      { 
       byte[] buf = new byte[Request.ContentLength]; 
       buf = Request.BinaryRead(Request.ContentLength); 
       string s = Encoding.UTF8.GetString(buf); 



       using (StreamWriter Streamwriter = new StreamWriter(HttpContext.Current.Server.MapPath("~/temp/") + System.DateTime.Now.ToFileTimeUtc().ToString() + ".xml")) 
       { 
        Streamwriter.Write(s); 
        Streamwriter.Close(); 
        Streamwriter.Dispose(); 
       } 
       UpdateLogFile("Data saved"); 
       //if (!IsResponseASN(s)) 
       // UpdatePOWithConfirmation(s); 

       Response.ContentType = "Text/XML"; 
       Stream sw = Response.OutputStream; 
       byte[] byteArray = Encoding.UTF8.GetBytes("OK"); 

       sw.Write(byteArray, 0, byteArray.Length); 
       sw.Close(); 
      } 
      catch (Exception ex) 
      { 
       Stream sw = Response.OutputStream; 
       byte[] byteArray = Encoding.UTF8.GetBytes(ex.Message); 
       sw.Write(byteArray, 0, byteArray.Length); 
       sw.Close(); 
       //Response.Write(ex.Message.ToString()); 
       UpdateLogFile("Error: " + ex.ToString()); 
      } 
     } 
    } 
    private void UpdateLogFile(string s) 
    { 

     using (StreamWriter Streamwriter = new StreamWriter(HttpContext.Current.Server.MapPath("~/temp/ack.log"), true)) 
     { 
      Streamwriter.Write(DateTime.Now.ToString("MM-dd-yyyy hh:mm:ss")); 
      Streamwriter.Write(s); 
      Streamwriter.Write(Environment.NewLine); 
      Streamwriter.Close(); 
      Streamwriter.Dispose(); 
     } 
    } 
} 
+0

Versuchen Sie 'DataSet.ReadXML()' Methode und sehen, ob das hilft. – Rahul

Antwort

0

so etwas wie dies versuchen, wenn Sie die XML als Zeichenfolge an den Webserver hochgeladen haben:

var xDocument = System.Xml.Linq.XDocument.Parse("<somenode>Some values</somenode>"); 
0

Vielen Dank Jungs für die Antwort. Ich verwendete De-Serialisierung für die Eingabezeichenfolge und analysierte dann die Zeichenfolge als XML.

Verwandte Themen