我正在尝试读取一个xml文件(后来将数据导入到sql数据库中),其中包含员工姓名地址'等。 我遇到的问题是,在xml中,员工地址的信息都是相同的。
<Employee>
<EmployeeDetails>
<Name>
<Ttl>Mr</Ttl>
<Fore>Baxter</Fore>
<Fore>Loki</Fore>
<Sur>Kelly</Sur>
</Name>
<Address>
<Line>Woof Road</Line>
<Line>Woof Lane</Line>
<Line>Woofington</Line>
<Line>London</Line>
</Address>
<BirthDate>1985-09-08</BirthDate>
<Gender>M</Gender>
<PassportNumber>123756rt</PassportNumber>
</EmployeeDetails>
</Employee>
我所有其他项目都可以提取,我试图使用Linq遍历每个“Line”节点,但它总是只是第一行而不是其他。
var xAddreesLines = xEmployeeDetails.Descendants("Address").Select(x => new
{
address = (string)x.Element("Line").Value
});
foreach (var item in xAddreesLines)
{
Console.WriteLine(item.address);
}
我需要能够在导入到我的sql db时,地址行是单独的变量
例如
var addressline1 =第一个<line>
节点
var addressline2 =第二个<line>
节点等等。
欢迎任何建议。
答案 0 :(得分:2)
这应该给你预期的输出: -
var xAddreesLines = xdoc.Descendants("Address")
.Elements("Line")
.Select(x => new { address = (string)x });
您需要简单地获取Line
节点中存在的Address
元素,然后您可以投影它们。另请注意,使用explicit conversion时无需在节点上调用Value
属性。
答案 1 :(得分:1)
你可以这样做:
using System.Xml;
.
.
.
XmlDocument doc = new XmlDocument();
doc.Load("source.xml");
// if you have the xml in a string use doc.LoadXml(stringvar)
XmlNamespaceManager nsmngr = new XmlNamespaceManager(doc.NameTable);
XmlNodeList results = doc.DocumentElement.SelectNodes("child::Employee", nsmngr);
foreach (XmlNode result in results)
{
XmlNode namenode = result.SelectSingleNode("Address");
XmlNodeList types = result.SelectNodes("line");
foreach (XmlNode type in types)
{
Console.WriteLine(type.InnerText);
}
XmlNode fmtaddress = result.SelectSingleNode("formatted_address");
}
有关原始来源,请参阅此question。