2016-05-19 2 views
-2

データを送信するためにXMLを作成しています。データには、文字列、整数、および小数の複数のデータ型が含まれています。私のXML形式とC#コードは、次のように作成します。 XMLで整数型データを送信する方法

<root> 
    <data>  
    <struct>   
     <PartnerCD></PartnerCD>   
     <UserName> </UserName>   
     <Password> </Password>  
     <Action> </Action>   
     <OfficeCD></OfficeCD>   
     <ChannelCD></ChannelCD>  
     <Token></Token>  
     <Notes> </Notes>   
     <Products>   
     <Product> 
      <ProductID></ProductID> 
      <SVA></SVA> 
      <Amount></Amount> 
     </Product>     
    </Products>  
    </struct> 
    </data> 
</root> 

そして、私のC#のコードは

public static string CreateRequestXML(string partnerCd, string userName, string password, string action, string productId, string token, string sva, string amount) 
    { 
     XmlDocument doc = new XmlDocument(); 

     XmlElement elemRoot = doc.CreateElement("root"); 
     XmlElement elemData = doc.CreateElement("data"); 
     XmlElement elemStruct = doc.CreateElement("struct"); 
     XmlElement elemProducts = doc.CreateElement("Products"); 
     XmlElement elemProduct = doc.CreateElement("Product"); 

     doc.AppendChild(elemRoot); 
     elemRoot.AppendChild(elemData); 
     elemData.AppendChild(elemStruct); 
     //Insert data here 
     InsertDataNode(doc, elemStruct, "PartnerCD", partnerCd); 
     InsertDataNode(doc, elemStruct, "UserName", userName); 
     InsertDataNode(doc, elemStruct, "Password", password); 
     InsertDataNode(doc, elemStruct, "Action", action); 
     InsertDataNode(doc, elemStruct, "Token", token); 
     elemStruct.AppendChild(elemProducts); 
     elemProducts.AppendChild(elemProduct); 
     InsertDataNode(doc, elemProduct, "ProductID", productId); 
     InsertDataNode(doc, elemProduct, "SVA", sva); 
     InsertDataNode(doc, elemProduct, "Amount", amount); 

     return doc.OuterXml; 
    } 

    private static void InsertDataNode(XmlDocument doc, XmlElement parentElem, string nodeName, string nodeValue) 
    { 
     XmlElement elem = doc.CreateElement(nodeName); 
     elem.InnerText = nodeValue; 
     parentElem.AppendChild(elem); 
    } 

であると私は小数として整数と金額要素としてPartnerCDとのProductIdの要素をしたい

<root> 
    <data> 
    <struct> 
     <PartnerCD>123</PartnerCD> 
     <UserName>api</UserName> 
     <Password>pass</Password> 
     <Action>token</Action> 
     <Token>4847898</Token> 
     <Products> 
     <Product> 
      <ProductID>123</ProductID> 
      <SVA>e8a8227c-bba3-4f32-a2cd-15e8f246344b</SVA> 
      <Amount>700</Amount> 
     </Product> 
     </Products> 
    </struct> 
    </data> 
</root> 

として結果を取得しています。私はXMLNodeTypeを試してみましたが、使用していません。

+1

どちらもそれらのノードが見えるのtest.xmlと呼ばれるビルドフォルダにXMLを見つける.....そうのようなXMLから\にオブジェクトとシリアル化\デシリアライズを作成します彼らは私にそれらの整数データを持っているように - 問題は正確に何ですか?そして 'Amount'はあなたがこのメソッドに渡したものです - 値が' 700'のように見えます – Jamiec

+0

'Amount'を小数点以下の桁数でXMLに表示したいのですか? – Renan

答えて

1

XMLは、「データ型」の概念がありませんネイティブに、XmlNodeTypeあなたが参照するには、それが(そのような要素として、などの属性)である、ないデータの種類は、その中に含まれているノードのどのようなタイプです。

1

XMLではデータ型はそれほど重要ではありません。使用するスキーマではすべて定義されています。つまり、期待されるデータ型の宣言が格納されます。

/root/data/struct/PartnerCDというXSDがある場合は、ファイルの検証時に検証エラーが発生します。 XML自体はすべてのデータのコンテナにすぎず、メタ情報は含まれていません。それを手動で定義することはできますが、ポイントは約99.99%のケースで私を超えていますし、MSXMLのようにXMLの謎に包まれています。

1

個人的に私は

using System; 
using System.Xml.Serialization; 
using System.Collections.Generic; 
using System.IO; 

namespace _37321906 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      Root root = new Root(); 
      root.Data.Struct.PartnerCD = 123; 
      root.Data.Struct.UserName = "api"; 
      root.Data.Struct.Password = "pass"; 
      root.Data.Struct.Action = "token"; 
      root.Data.Struct.Token = 4847898; 
      root.Data.Struct.Products.Product.Add(new Product { ProductID = 123, SVA = "e8a8227c-bba3-4f32-a2cd-15e8f246344b", Amount = 700.0001 }); 

      // Serialize the root object to XML 
      Serialize<Root>(root); 

      // Deserialize from XML 
      Root DeserializeRoot = Deserialize<Root>(); 
     } 

     private static void Serialize<T>(T data) 
     { 

      // Use a file stream here. 
      using (TextWriter WriteFileStream = new StreamWriter("test.xml")) 
      { 
       // Construct a SoapFormatter and use it 
       // to serialize the data to the stream. 
       XmlSerializer SerializerObj = new XmlSerializer(typeof(T)); 

       try 
       { 
        // Serialize EmployeeList to the file stream 
        SerializerObj.Serialize(WriteFileStream, data); 
       } 
       catch (Exception ex) 
       { 
        Console.WriteLine(string.Format("Failed to serialize. Reason: {0}", ex.Message)); 
       } 
      } 
     } 

     private static T Deserialize<T>() where T : new() 
     { 
      //List<Employee> EmployeeList2 = new List<Employee>(); 
      // Create an instance of T 
      T ReturnListOfT = CreateInstance<T>(); 


      // Create a new file stream for reading the XML file 
      using (FileStream ReadFileStream = new FileStream("test.xml", FileMode.Open, FileAccess.Read, FileShare.Read)) 
      { 
       // Construct a XmlSerializer and use it 
       // to serialize the data from the stream. 
       XmlSerializer SerializerObj = new XmlSerializer(typeof(T)); 
       try 
       { 
        // Deserialize the hashtable from the file 
        ReturnListOfT = (T)SerializerObj.Deserialize(ReadFileStream); 
       } 
       catch (Exception ex) 
       { 
        Console.WriteLine(string.Format("Failed to serialize. Reason: {0}", ex.Message)); 
       } 

      } 
      // return the Deserialized data. 
      return ReturnListOfT; 
     } 

     // function to create instance of T 
     public static T CreateInstance<T>() where T : new() 
     { 
      return (T)Activator.CreateInstance(typeof(T)); 
     } 
    } 

    [XmlRoot(ElementName = "Product")] 
    public class Product 
    { 
     [XmlElement(ElementName = "ProductID")] 
     public int ProductID { get; set; } 
     [XmlElement(ElementName = "SVA")] 
     public string SVA { get; set; } 
     [XmlElement(ElementName = "Amount")] 
     public double Amount { get; set; } 
    } 

    [XmlRoot(ElementName = "Products")] 
    public class Products 
    { 
     public Products() 
     { 
      this.Product = new List<Product>(); 
     } 
     [XmlElement(ElementName = "Product")] 
     public List<Product> Product { get; set; } 
    } 

    [XmlRoot(ElementName = "struct")] 
    public class Struct 
    { 
     public Struct() 
     { 
      this.Products = new Products(); 
     } 
     [XmlElement(ElementName = "PartnerCD")] 
     public int PartnerCD { get; set; } 
     [XmlElement(ElementName = "UserName")] 
     public string UserName { get; set; } 
     [XmlElement(ElementName = "Password")] 
     public string Password { get; set; } 
     [XmlElement(ElementName = "Action")] 
     public string Action { get; set; } 
     [XmlElement(ElementName = "OfficeCD")] 
     public string OfficeCD { get; set; } 
     [XmlElement(ElementName = "ChannelCD")] 
     public string ChannelCD { get; set; } 
     [XmlElement(ElementName = "Token")] 
     public int Token { get; set; } 
     [XmlElement(ElementName = "Notes")] 
     public string Notes { get; set; } 
     [XmlElement(ElementName = "Products")] 
     public Products Products { get; set; } 
    } 

    [XmlRoot(ElementName = "data")] 
    public class Data 
    { 
     public Data() 
     { 
      this.Struct = new Struct(); 
     } 
     [XmlElement(ElementName = "struct")] 
     public Struct Struct { get; set; } 
    } 

    [XmlRoot(ElementName = "root")] 
    public class Root 
    { 
     public Root() 
     { 
      this.Data = new Data(); 
     } 
     [XmlElement(ElementName = "data")] 
     public Data Data { get; set; } 
    } 
} 

関連する問題