大约一个月前,我遇到了将现有XML文件中的值获取到我的C#程序中的问题。
我在stackoverflow中尝试了许多不同的答案,但这并不是我真正需要的。
我想分享我在这里找到的解决方案,这样可以帮助面临其他类似问题的其他人。
我已经解决了这个问题,但想与您分享这个解决方案。
注意:这仅适用于内容相同的xml文件。
让我告诉你我如何解决它:
第一步:我已经按照xml文件中的xml结构创建了一个类
[XmlRoot("Data")]
public class Data
{
[XmlElement("Msg")]
public Msg Msgs { get; set; }
}
public class Msg
{
[XmlElement]
public string Type { get; set; }
[XmlElement]
public string UserID { get; set; }
[XmlElement]
public string SerialNumber { get; set; }
[XmlElement]
public string DateTime { get; set; }
[XmlElement("Rows")]
public Rows RowsObj { get; set; }
}
public class Rows
{
[XmlElement("Row")]
public List<Row> RowsList { get; set; }
}
public class Row
{
[XmlElement]
public string InvoiceCode { get; set; }
[XmlElement]
public string ServiceCode { get; set; }
[XmlElement]
public string BranchID { get; set; }
[XmlElement]
public string AbonCode { get; set; }
[XmlElement]
public string Amount { get; set; }
[XmlElement]
public string PaymentDate { get; set; }
[XmlElement]
public string ReceiptNumber { get; set; }
[XmlElement]
public string PaymentSite { get; set; }
[XmlElement]
public string PaymentInstrument { get; set; }
[XmlElement]
public string BankHeadOfficeCode { get; set; }
}
这是我的.xml文件结构
<?xml version="1.0" encoding="utf-8"?>
<Data>
<Header/>
<Msg>
<Type>INVOICE_PAY_APUS</Type>
<UserID>888888</UserID>
<SerialNumber>8210089</SerialNumber>
<DateTime>2015-04-15T15:20:17</DateTime>
<Rows>
<Row>
<InvoiceCode>1414016335DR</InvoiceCode>
<BranchID>981008</BranchID>
<AbonCode>1414016335</AbonCode>
<Amount>80.00</Amount>
<PaymentDate>2015-04-15T15:20:03</PaymentDate>
<ReceiptNumber>95037101</ReceiptNumber>
<PaymentSite>GPP</PaymentSite>
<PaymentInstrument>4</PaymentInstrument>
<BankHeadOfficeCode>qwerty</BankHeadOfficeCode>
</Row>
<Row>
<InvoiceCode>1414016335XH</InvoiceCode>
<BranchID>981005</BranchID>
<AbonCode>1414016335</AbonCode>
<Amount>34.00</Amount>
<PaymentDate>2015-04-15T15:20:03</PaymentDate>
<ReceiptNumber>95037103</ReceiptNumber>
<PaymentInstrument>4</PaymentInstrument>
<PaymentSite>GPP</PaymentSite>
<BankHeadOfficeCode>AZRTAZ22</BankHeadOfficeCode>
</Row>
</Rows>
</Msg>
</Data>
如您所见,我在Data等下方有一个称为Data和Msg的根元素。
第二步:
在控制台应用程序的主类中,我试图到达放置xml文件的文件夹,然后,我从xml中读取数据并将其解析为对象。
class Program
{
static void Main(string[] args)
{
string mainPath = "C:\\xmlTest"; //folder with my xml files goes here, it's optional, you can change it to whatever you want
Data data = new Data();
foreach (string file in Directory.EnumerateFiles(mainPath, "*.xml"))
{
XmlSerializer mySerializer = new XmlSerializer(typeof(Data));
StreamReader streamReader = new StreamReader(file);
data = (Data)mySerializer.Deserialize(streamReader);
streamReader.Close();
List<Row> rows = data.Msgs.RowsObj.RowsList;
foreach (var row in rows)
{
//do stuff here
//example: string paymentType = row.InvoiceCode.Substring(row.InvoiceCode.Length - 2);
}
}
}
}
就是这样,希望对您有所帮助。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句