2016-12-15 56 views
3
<ENVELOPE>   
     <BODY> 
      <IMPORTDATA> 
      <REQUESTDATA> 
      <TALLYMESSAGE xmlns:UDF="TallyUDF"> 
      <VOUCHER REMOTEID="4b6b9384" VCHKEY="4b6b9384" VCHTYPE="Payment" ACTION="Create" OBJVIEW="Accounting Voucher View"> 
       <DATE>20160102</DATE> 
      </VOUCHER> 
      </TALLYMESSAGE> 
      </REQUESTDATA> 
      </IMPORTDATA> 
     </BODY> 
</ENVELOPE> 

這是xml文件現在我想將日期序列化爲.net,如01/02/2016(dd/mm/yy或mm/dd/YY格式) 我想這雙向如何做從XML到C#.NET的序列化日期

objCompanyVouchar.VOUCHER_DATE=XmlConvert.ToDateTime(node.SelectSingleNode("DATE").InnerText) 
objCompanyVouchar.VOUCHER_DATE = Convert.ToDateTime(node.SelectSingleNode("DATE").InnerText); 

但它顯示異常「字符串未被識別爲有效的DateTime。」 有誰知道我該如何解決這個問題?

回答

4

沒有什麼需要做的XmlConvertConvert類所需。

比方說,你知道的格式爲「年月日」,那麼你需要做的是:

var date= DateTime.ParseExact(node.SelectSingleNode("DATE").InnerText,"yyyyMMdd", CultureInfo.InvariantCulture); 

objCompanyVouchar.VOUCHER_DATE= date; //If VOUCHER_DATE is DateTime 
//objCompanyVouchar.VOUCHER_DATE = date.ToString(); //If VOUCHER_DATE is String 

|你可以選擇你想要的格式,閱讀更多ToString()

+0

嗨張學友,在上述XML partyledgername比one.How找到兩個partyledgername –

+0

嗨@anisprogrammer可以更使用'SelectNodes':'var pnameNodes = node.SelectNodes(「PARTYLEDGERNAME」);'pnameNodes是一個XmlNodeList,其中包含'pnameNodes [0] .InnerText =「Standard Chartered Bank」;''''和'pnameNode [1] .InnerText =「XYZ有限公司「;' – Jacky

0
using System; 
using System.Xml; 
using System.Xml.XPath; 
using System.Xml.Serialization; 
namespace XMLTest1 
{ 
    public class Test 
    { 
     public String value1; 
     public String value2; 
    } 

    class listtest 
    { 
     static void Main(string[] args) 
     { 
      XmlDocument myXml = new XmlDocument(); 
      XPathNavigator xNav = myXml.CreateNavigator(); 
      Test myTest = new Test() { value1 = "Value 1", value2 = "Value 2" }; 
      XmlSerializer x = new XmlSerializer(myTest.GetType()); 
      using (var xs = xNav.AppendChild()) 
      { 
       x.Serialize(xs, myTest); 
      } 
      Console.WriteLine(myXml.OuterXml); 
      Console.ReadKey(); 
     } 
    } } 
0

嘗試XML LINQ

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Xml; 
using System.Xml.Linq; 

namespace ConsoleApplication1 
{ 
    class Program 
    { 
     const string FILENAME = @"c:\temp\test.xml"; 
     static void Main(string[] args) 
     { 
      XDocument doc = XDocument.Load(FILENAME); 

      var inportData = doc.Descendants("IMPORTDATA").Select(x => new { 
       reportName = (string)x.Descendants("REPORTNAME").FirstOrDefault(), 
       company = (string)x.Descendants("SVCURRENTCOMPANY").FirstOrDefault(), 
       remoteID = (string)x.Descendants("VOUCHER").FirstOrDefault().Attribute("REMOTEID"), 
       vchKey = (string)x.Descendants("VOUCHER").FirstOrDefault().Attribute("VCHKEY"), 
       date = DateTime.ParseExact((string)x.Descendants("DATE").FirstOrDefault(), "yyyyMMdd", System.Globalization.CultureInfo.InvariantCulture), 
       voucherName = (string)x.Descendants("VOUCHERTYPENAME").FirstOrDefault(), 
       voucherNumber = (int)x.Descendants("VOUCHERNUMBER").FirstOrDefault(), 
       ledgerName = (string)x.Descendants("PARTYLEDGERNAME").FirstOrDefault() 
      }).FirstOrDefault(); 

     } 
    } 
}