[英]Parse XML using LINQ to XML?
我尝试使用Linq在C#中解析XML。
这是我正在解析的XML:
<Credit>
<LoanApp>
<LoanAppRq PaymentCall="True" Personal="True" Type="Finance">
<Applicant>
<Personal>
<Individuals>
<Individual Type="Applicant">
<GivenName>
<FirstName>test</FirstName>
<LastName>tester</LastName>
</GivenName>
<ContactInfo>
<Address Type="Current">
<StreetNumber>6</StreetNumber>
<StreetName>alton AVE</StreetName>
<City>PHILADELPHIA</City>
<State>PA</State>
<Zip>19142</Zip>
<TimeAtLocation>
<Year>6</Year>
<Month>0</Month>
</TimeAtLocation>
</Address>
<Address Type="Previous">
<StreetNumber>83</StreetNumber>
<StreetName>Main Street</StreetName>
<StreetExtra>12</StreetExtra>
<City>Irvine</City>
<State>CA</State>
<Zip>92695</Zip>
<Country>USA</Country>
<TimeAtLocation>
<Year/>
<Month>3</Month>
</TimeAtLocation>
</Address>
</ContactInfo>
这是我解析它的代码:
parsed_xml.LoadXml(dto.xml);
XElement xelement = XElement.Load(stream);
IEnumerable<XElement> Credit = xelement.Elements();
foreach (var item in Credit)
{
dt.BORROWERFIRSTNAME = item.Element("LoanApp").Element("LoanAppRq").Element("Applicant").Element("Personal").Element("Individuals").Element("Individual").Element("GivenName").Element("FirstName").Value;
dt.BORROWERLASTNAME= item.Element("LoanApp").Element("LoanAppRq").Element("Applicant").Element("Personal").Element("Individuals").Element("Individual").Element("GivenName").Element("LastName").Value;
}
这段代码给了我名字和姓氏。
我已将此网站用作学习参考。
对于像您这样的没有复杂名称空间的深层XML层次结构,我更喜欢System.Xml.XPath
名称空间中的XPathSelectElements
。
假设您的xelement
元素具有问题中所显示的XML,则可以执行以下操作:
foreach (var individual in xelement.XPathSelectElements("LoanApp/LoanAppRq/Applicant/Personal/Individuals/Individual"))
{
// Get the first and last name.
var BORROWERFIRSTNAME = (string)individual.XPathSelectElement("GivenName/FirstName");
var BORROWERLASTNAME = (string)individual.XPathSelectElement("GivenName/LastName");
// Get the XElement for the current address.
var currentAddress = individual.XPathSelectElements("ContactInfo/Address[@Type='Current']")
.FirstOrDefault();
// Extract its properties, checking for a missing current address if necessary.
var currentZip = (currentAddress == null ? null : (string)currentAddress.Element("Zip"));
// Get the XElement for the previous address.
var previousAddress = individual.XPathSelectElements("ContactInfo/Address[@Type='Previous']")
.FirstOrDefault();
// Extract its properties, checking for a missing previous address if necessary.
var previousZip = (previousAddress == null ? null : (string)previousAddress.Element("Zip"));
// Process the borrower names and addresses as required.
}
从Linq到XML的等效项是:
foreach (var individual in xelement.Elements("LoanApp")
.Elements("LoanAppRq")
.Elements("Applicant")
.Elements("Personal")
.Elements("Individuals")
.Elements("Individual"))
{
// Get the first and last name.
var BORROWERFIRSTNAME = (string)individual.Elements("GivenName")
.Elements("FirstName")
.FirstOrDefault();
var BORROWERLASTNAME = (string)individual.Elements("GivenName")
.Elements("LastName")
.FirstOrDefault();
// Get the XElement for the current address.
var currentAddress = individual.Elements("ContactInfo").Elements("Address").Where(e => (string)e.Attribute("Type") == "Current").FirstOrDefault();
// Extract its properties, checking for a missing current address if necessary.
var currentZip = (currentAddress == null ? null : (string)currentAddress.Element("Zip"));
// Get the XElement for the previous address.
var previousAddress = individual.Elements("ContactInfo").Elements("Address").Where(e => (string)e.Attribute("Type") == "Previous").FirstOrDefault();
// Extract its properties, checking for a missing previous address if necessary.
var previousZip = (previousAddress == null ? null : (string)previousAddress.Element("Zip"));
// Process the borrower names and addresses as required.
}
如您所见,它看起来有点复杂。
使用Descendant()
和Descendants()
代替
foreach (var item in Credit)
{
dt.BORROWERFIRSTNAME = item.Descendant("FirstName").Value;
dt.BORROWERLASTNAME= item.Descendant("LastName").Value;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.