我想通过具有属性的标签将xml文件拆分为多个文件。
这是我的xml
:
源XML文档
<BATCH ID="131070" Date_Submitted="12/1/2014 7:36:06 AM" Date_Received="12/1/2014 7:36:06 AM" Date_Processed="12/1/2014 7:40:00 AM" UserID="PAYPINST" Error_Count="1">
<CLAIMS Submitter="541884924" Submitter_Num="" Version="005010X223A2">
<CLAIM Rec_ID="1" Claim_Type="Institutional" Submitter="541884924">
</CLAIM>
<CLAIM Rec_ID="2" Claim_Type="Institutional" Submitter="541884924">
</CLAIM>
</CLAIMS>
</BATCH>
在这里,我想用分割文件CLAIM
。我使用了以下代码。
XDocument doc = XDocument.Load(xmlFilePath);
var newDocs = doc.Descendants("CLAIM")
.Select(d => new XDocument(new XElement("BATCH", new XElement("CLAIMS", d))));
foreach (var newDoc in newDocs)
{
newDoc.Save(SplitedxmlFileName);
}
当我运行代码时,它给了我分割的文件。但这并没有给我标签的属性。
我引用此链接:如何将一个XML文件拆分为多个XML文件
我想输出这样的东西:
应该拆分为两个xml文档,如下所示
1)
<BATCH ID="131070" Date_Submitted="12/1/2014 7:36:06 AM" Date_Received="12/1/2014 7:36:06 AM" Date_Processed="12/1/2014 7:40:00 AM" UserID="PAYPINST" Error_Count="1">
<CLAIMS Submitter="541884924" Submitter_Num="" Version="005010X223A2">
<CLAIM Rec_ID="1" Claim_Type="Institutional" Submitter="54188424">
</CLAIM>
</CLAIMS>
</BATCH>
2)
<BATCH ID="131070" Date_Submitted="12/1/2014 7:36:06 AM" Date_Received="12/1/2014 7:36:06 AM" Date_Processed="12/1/2014 7:40:00 AM" UserID="PAYPINST" Error_Count="1">
<CLAIMS Submitter="541884924" Submitter_Num="" Version="005010X223A2">
<CLAIM Rec_ID="2" Claim_Type="Institutional" Submitter="51884924">
</CLAIM>
</CLAIMS>
</BATCH>
如何通过带有属性的标签拆分xml文件?
我试图隔离步骤。您能够区分不同的节点。因此,您只需要父节点属性。假设BATCH&CLAIMS的属性值对于每个xml文件始终是相同的。您可以尝试对代码进行以下修改。
XDocument doc = XDocument.Load("XMLFile1.xml");
var newDocs = doc.Descendants("CLAIM")
.Select(d => new XDocument(new XElement("BATCH", new XElement("CLAIMS", d))));
var batch = doc.Element("BATCH");
var claims = doc.Descendants("CLAIMS");
int i = 0;
foreach (var newDoc in newDocs)
{
foreach (XAttribute xat in batch.Attributes())
{
newDoc.Element("BATCH").SetAttributeValue(xat.Name, xat.Value);
}
foreach (XElement claim in claims)
{
foreach (XAttribute xat in claim.Attributes())
{
newDoc.Descendants("CLAIMS").ElementAt(0).SetAttributeValue(xat.Name, xat.Value);
}
}
newDoc.Save(i.ToString());
++i;
}
让我知道是否有帮助。
编辑
XDocument doc = XDocument.Load("XMLFile1.xml");
var newDocs = doc.Descendants("CLAIM")
.Select(d => new XDocument(new XElement("BATCH", new XElement("CLAIMS", d))));
var batch = doc.Element("BATCH");
var claims = doc.Descendants("CLAIMS");
int i = 0;
foreach (var newDoc in newDocs)
{
batch.Attributes().All(p => { newDoc.Element("BATCH").SetAttributeValue(p.Name, p.Value); return true; });
claims.All(p => p.Attributes().All(k => { newDoc.Descendants("CLAIMS").ElementAt(0).SetAttributeValue(k.Name, k.Value); return true; }));
newDoc.Save(i.ToString());
++i;
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句