我的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
但是,对我来说,这似乎更加复杂。
欢迎任何帮助。谢谢。