我需要将xml值存储到数据库的两个不同表中。
现在我正在使用LINQ,但我无法按照自己的意愿使用它。
这是XML:
<?xml version="1.0" encoding="utf-8" ?>
<nfeProc xmlns="http://www.tst.com">
<NFe xmlns="http://www.tst.com">
<infNFe Id="409" versao="2.00">
<ide>
<cUF>43</cUF>
<cNF>00011740</cNF>
</ide>
<emit>
<GGT>0483</GGT>
</emit>
<det nItem="1">
<prod>
<cProd>27</cProd>
<NCM>85437099</NCM>
</prod>
</det>
<det nItem="2">
<prod>
<cProd>30</cProd>
<NCM>85457099</NCM>
</prod>
</det>
</infNFe>
</NFe>
</nfeProc>
现在我使用以下代码:
XDocument xml = XDocument.Load(@file);
XNamespace a = "http://www.portalfiscal.inf.br/nfe";
var NFe = from data in xml.Descendants(a + "nfeProc")
select new
{
cUF = (string)data.Elements(a + "NFe").Elements(a + "infNFe").Elements(a + "ide").Elements(a + "cUF").FirstOrDefault(),
nNF = (string)data.Elements(a + "NFe").Elements(a + "infNFe").Elements(a + "ide").Elements(a + "nNF").FirstOrDefault(),
};
var Prod = from Produto in xml.Descendants(a + "det")
select new
{
cProd = (string)Produto.Elements(a + "prod").Elements(a + "cProd").FirstOrDefault(),
NCM = (string)Produto.Elements(a + "prod").Elements(a + "NCM").FirstOrDefault(),
};
foreach (var nf in NFe)
{
}
foreach (var p in prod)
{
}
然后我使用ADO.NET发送到数据库。但是我只想在一个foreach中做,所以我可以使用SQL Server中的OUTPUT
子句来关联两个集合(从表1(NFe)获取ID,并将INSERT输入表2(Prod))。我怎样才能做到这一点。我尝试了很多没有成功的事情。我试过一个:
var NFe from data in xml.Descendants(a + "nfeProc")
select new {}...
但是这样我才能得到一个&#34; cProd&#34;而不是所有人。
欢迎其他方法。
感谢。
编辑:
感谢您的回答,但实际上我让它只是改变我的foreach。
foreach (var nf in NFe)
{
foreach (var p in prod)
{
}
}
这样我可以使用cmd.ExecuteScalar()从我的第一个foreach获取OUTPUT.ID,并在我的第二个foreach中的下一个INSERT中使用它。
答案 0 :(得分:0)
另一种说出var Prod
的方法是
var Prod = xml.Descendants(a + "cProd")
.Select(x => new
{
cProd = (string)x,
NCM = (string)x.Parent.Element(a + "NCM")
});
或者如果您完全知道NCM节点遵循cProd节点
NCM = (string)(XElement)x.NextNode
答案 1 :(得分:0)
自从.Net 1.1以来,这已经存在,我猜不再流行,但你可以:
DataSet.ReadXml
重载,并使用它来持久保存数据库或数据绑定。