如何从复杂的sepa xml一一获取所有值?

时间:2019-02-08 16:30:59

标签: c# asp.net xml

我的xml结构类似或有时不同。

<?xml version="1.0" encoding="UTF-8"?>
<Document xmlns="urn:iso:std:iso:20022:tech:xsd:pain.009.001.01">
    <MndtInitnReq>
        <GrpHdr>
            <MsgId>xxx</MsgId>
            <CreDtTm>2016-06-23T15:13:48+05:30</CreDtTm>
            <InitgPty>
                <Id>
                    <OrgId>
                        <Othr>
                            <Id>xxx</Id>
                        </Othr>
                    </OrgId>
                </Id>
            </InitgPty>
            <InstgAgt>
                <FinInstnId>
                    <ClrSysMmbId>
                        <MmbId>xxx</MmbId>
                    </ClrSysMmbId>
                    <Nm>xxx</Nm>
                </FinInstnId>
            </InstgAgt>
            <InstdAgt>
                <FinInstnId>
                    <ClrSysMmbId>
                        <MmbId>xxx</MmbId>
                    </ClrSysMmbId>
                    <Nm>xxx</Nm>
                </FinInstnId>
            </InstdAgt>
        </GrpHdr>
        <Mndt>
            <MndtId>xxx</MndtId>
            <MndtReqId>xxx</MndtReqId>
            <Tp>
                <SvcLvl>
                    <Prtry>xxx</Prtry>
                </SvcLvl>
                <LclInstrm>
                    <Prtry>xxx</Prtry>
                </LclInstrm>
            </Tp>
            <Ocrncs>
                <SeqTp>xxx</SeqTp>
                <Frqcy>xxx</Frqcy>
                <FrstColltnDt>xxx</FrstColltnDt>
                <FnlColltnDt>xxx</FnlColltnDt>
            </Ocrncs>
            <ColltnAmt Ccy="USD">xxx</ColltnAmt>
            <Cdtr>
                <Nm>xxx</Nm>
            </Cdtr>
            <CdtrAcct>
                <Id>
                    <Othr>
                        <Id>xxx</Id>
                    </Othr>
                </Id>
            </CdtrAcct>
            <CdtrAgt>
                <FinInstnId>
                    <ClrSysMmbId>
                        <MmbId>xxx</MmbId>
                    </ClrSysMmbId>
                    <Nm>xxx</Nm>
                </FinInstnId>
            </CdtrAgt>
            <Dbtr>
                <Nm>xxx</Nm>
                <Id>
                    <PrvtId>
                        <Othr>
                            <Id>xxx</Id>
                            <SchmeNm>
                                <Prtry>xxx</Prtry>
                            </SchmeNm>
                        </Othr>
                    </PrvtId>
                </Id>
                <CtctDtls>
                    <MobNb>xxx</MobNb>
                    <EmailAdr>xxx</EmailAdr>
                </CtctDtls>
            </Dbtr>
            <DbtrAcct>
                <Id>
                    <Othr>
                        <Id>xxx</Id>
                    </Othr>
                </Id>
                <Tp>
                    <Prtry>xxx</Prtry>
                </Tp>
            </DbtrAcct>
            <DbtrAgt>
                <FinInstnId>
                    <ClrSysMmbId>
                        <MmbId>xxx</MmbId>
                    </ClrSysMmbId>
                    <Nm>xxx</Nm>
                </FinInstnId>
            </DbtrAgt>
        </Mndt>
    </MndtInitnReq>
</Document>

有时某些值不是这样给出的。

<?xml version="1.0" encoding="UTF-8"?>
<Document xmlns="urn:iso:std:iso:20022:tech:xsd:pain.009.001.01">
    <MndtInitnReq>
        <GrpHdr>
            <MsgId>xxx</MsgId>
            <CreDtTm>2016-07-22T13:30:59+05:30</CreDtTm>
            <InstgAgt>
                <FinInstnId>
                    <ClrSysMmbId>
                        <MmbId>xxx</MmbId>
                    </ClrSysMmbId>
                </FinInstnId>
            </InstgAgt>
            <InstdAgt>
                <FinInstnId>
                    <ClrSysMmbId>
                        <MmbId>xxx</MmbId>
                    </ClrSysMmbId>
                </FinInstnId>
            </InstdAgt>
        </GrpHdr>
        <Mndt>
            <MndtId>xxx</MndtId>
            <MndtReqId>xxx</MndtReqId>
            <Tp>
                <SvcLvl>
                    <Prtry>xxx</Prtry>
                </SvcLvl>
                <LclInstrm>
                    <Prtry>xxx</Prtry>
                </LclInstrm>
            </Tp>
            <Ocrncs>
                <SeqTp>xxx</SeqTp>
                <Frqcy>xxx</Frqcy>
                <FrstColltnDt>xxx</FrstColltnDt>
            </Ocrncs>
            <ColltnAmt Ccy="USD">xxx</ColltnAmt>
            <Cdtr>
                <Nm>xxx</Nm>
                <Id>
                    <OrgId>
                        <Othr>
                            <Id>xxx</Id>
                        </Othr>
                    </OrgId>
                </Id>
                <CtctDtls>
                    <Othr>xxx</Othr>
                </CtctDtls>
            </Cdtr>
            <CdtrAcct>
                <Id>
                    <Othr>
                        <Id>xxx</Id>
                    </Othr>
                </Id>
            </CdtrAcct>
            <CdtrAgt>
                <FinInstnId>
                    <ClrSysMmbId>
                        <MmbId>xxx</MmbId>
                    </ClrSysMmbId>
                    <Nm>xxx</Nm>
                </FinInstnId>
            </CdtrAgt>
            <Dbtr>
                <Nm>xxx</Nm>
                <Id>
                    <PrvtId>
                        <Othr>
                            <Id>xxx</Id>
                        </Othr>
                    </PrvtId>
                </Id>
                <CtctDtls />
            </Dbtr>
            <DbtrAcct>
                <Id>
                    <Othr>
                        <Id>xxx</Id>
                    </Othr>
                </Id>
                <Tp>
                    <Prtry>xxx</Prtry>
                </Tp>
            </DbtrAcct>
            <DbtrAgt>
                <FinInstnId>
                    <ClrSysMmbId>
                        <MmbId>xxx</MmbId>
                    </ClrSysMmbId>
                    <Nm>xxx</Nm>
                </FinInstnId>
            </DbtrAgt>
        </Mndt>
    </MndtInitnReq>
</Document>

目前,我正在使用此方法实现所有值。

public void getxmlData102()
        {
            try
            {
                string path = @"D:\temp\";
                string filename = @"xxx-xxxx-xxxx.xml";
                string fullpath = path + filename;
                StreamReader sr = new StreamReader(fullpath);
                string fullxml = sr.ReadToEnd();
                XmlDocument doc = new XmlDocument();
                doc.LoadXml(fullxml);
                textbox1.Text = fullxml;               
                label1.Text = doc.GetElementsByTagName("MsgId").Item(0).InnerText;
                label2.Text = doc.GetElementsByTagName("CreDtTm").Item(0).InnerText;
                label3.Text = doc.GetElementsByTagName("MmbId").Item(0).InnerText;
                label4.Text = doc.GetElementsByTagName("Nm").Item(0).InnerText;
                label5.Text = doc.GetElementsByTagName("MmbId").Item(1).InnerText;
                label6.Text = doc.GetElementsByTagName("Nm").Item(1).InnerText;
                label7.Text = doc.GetElementsByTagName("MndtId").Item(0).InnerText;
                label8.Text = doc.GetElementsByTagName("MndtReqId").Item(0).InnerText;
                label9.Text = doc.GetElementsByTagName("Prtry").Item(0).InnerText;
                label10.Text = doc.GetElementsByTagName("Prtry").Item(1).InnerText;
                label11.Text = doc.GetElementsByTagName("SeqTp").Item(0).InnerText;
                label12.Text = doc.GetElementsByTagName("Frqcy").Item(0).InnerText;
                label13.Text = doc.GetElementsByTagName("FrstColltnDt").Item(0).InnerText;
                label14.Text = doc.GetElementsByTagName("FnlColltnDt").Item(0).InnerText;
                label15.Text = doc.GetElementsByTagName("MaxAmt").Item(0).InnerText;
                label16.Text = doc.GetElementsByTagName("Nm").Item(2).InnerText;
                label17.Text = doc.GetElementsByTagName("Id").Item(0).InnerText;
                label18.Text = doc.GetElementsByTagName("MmbId").Item(2).InnerText;
                label19.Text = doc.GetElementsByTagName("Nm").Item(3).InnerText;
                label20.Text = doc.GetElementsByTagName("Nm").Item(4).InnerText;
                label21.Text = doc.GetElementsByTagName("Id").Item(5).InnerText;
                label22.Text = doc.GetElementsByTagName("Prtry").Item(2).InnerText;
                label23.Text = doc.GetElementsByTagName("Id").Item(6).InnerText;
                label24.Text = doc.GetElementsByTagName("Prtry").Item(3).InnerText;
                label25.Text = doc.GetElementsByTagName("MmbId").Item(3).InnerText;
                label26.Text = doc.GetElementsByTagName("Nm").Item(5).InnerText;

            }
            catch (Exception ex)
            {
                lblerror.Text = ex.Message;
            }
        } 

当缺少某些元素时,我会得到自然的对象引用异常。

通过其他任何方法检查元素是否存在以及是否存在,然后获取该元素的值。

我遵循了以下链接。

How to get node values in XML file using c#
Get value of xml node in c#
How to get specific value from a xml string in c#
Getting specified Node values from XML document

但是,对我来说,这似乎更加复杂。

欢迎任何帮助。谢谢。

0 个答案:

没有答案