【问题标题】:How to pick all xml files from folder in c# and parse them如何从 c# 中的文件夹中选择所有 xml 文件并解析它们
【发布时间】:2015-05-26 07:06:19
【问题描述】:

大约一个月前,我遇到了从现有 XML 文件中获取值到我的 c# 程序中的问题。
我在 stackoverflow 中尝试了许多不同的答案,但这并不是我所需要的。
我想分享我在这里找到的解决方案,以便帮助其他面临类似问题的人。

【问题讨论】:

  • 我投票决定将此问题作为题外话结束,因为这不是一个问题。你最好把它发到code review
  • @ZoharPeled 他不要求审查。他正在分享一个问题的解决方案。如果他愿意,他可以要求审查他的代码,但这不是他的初衷。我认为他应该提出一个问题并直接回答(这就是让wiki没有的方式?)
  • @chillworld 我猜你说得有道理。仍然不是问题,因此 OP 最好对其进行编辑或将其移至更合适的网站
  • @ZoharPeled 我已经编辑了问题并添加了答案,谢谢您的评论
  • @ElvinNoMatter 也接受它作为答案

标签: c# xml parsing


【解决方案1】:

我已经解决了这个问题,但想和你分享这个解决方案。

注意:这只适用于内容相同的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);
                    }



        }
    }
}

就是这样,希望对大家有所帮助。

【讨论】:

    猜你喜欢
    • 2022-07-25
    • 2021-11-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-06
    • 1970-01-01
    相关资源
    最近更新 更多