通过将两个文件中的API编号匹配,我将钻取详细信息从第二个xml文件复制到第一个xml文件。我已将其合并到wellbore标签下,但我想删除<APINUMBER>
标签内的标签<METADATA>
和<DRILLINGPERMIT>
,因为在合并的Xml中,它已经在wellbore标签的开头了。请帮助我修改此标签linq选择删除这两个标签的xml标签并将其存储到apilist变量或任何其他方法。
1st Xml
<WellBore>
<APINumber>42001321910000</APINumber>
<MetaData>
<Identification>4200132191</Identification>
<Units_System>US_CUSTOMARY</Units_System>
</MetaData>
<WBRoot>
<RrcTapeRecordId>0</RrcTapeRecordId>
<WbApiNumber>4200132191</WbApiNumber>
</WBRoot>
</WellBore>
第二Xml
<DrillingPermit>
<APINumber>42001321910000</APINumber>
<MetaData>
<Identification>4200132191</Identification>
<Units_System>US_CUSTOMARY</Units_System>
<MetaData>
<DARoot>
<RrcTapeRecordId>0</RrcTapeRecordId>
<DAStatusNumber>854731</DAStatusNumber>
</DARoot>
</DrillingPermit>
合并的XML
<WellBore>
<APINumber>42001321910000</APINumber>
<MetaData>
<Identification>4200132191</Identification>
<Units_System>US_CUSTOMARY</Units_System>
</MetaData>
<WBRoot>
<RrcTapeRecordId>0</RrcTapeRecordId>
<WbApiNumber>4200132191</WbApiNumber>
</WBRoot>
<DrillingPermit>
<APINumber>42001321910000</APINumber>
<MetaData>
<Identification>4200132191</Identification>
<Units_System>US_CUSTOMARY</Units_System>
<MetaData>
<DARoot>
<RrcTapeRecordId>0</RrcTapeRecordId>
<DAStatusNumber>854731</DAStatusNumber>
</DARoot>
</DrillingPermit>
</WellBore>
List<XElement> drill = xml2.Descendants("DrillingPermit").Elements("APINumber").ToList();
foreach (var apiitem in apilist)
{
List<XElement> apilists = (from w1 in xml2.Descendants("DrillingPermit")
where drill.Any(w2 => w1.Element("APINumber").Value == apiitem.Value)
select w1).ToList();
}
我应该发表评论,但是我仍然不能写它们。
无论如何,如果您不创建新节点,则必须从DrillingPermit节点中手动删除ApiNumer和MetaData节点作为子节点。
所以它看起来像:
apilists.foreach(a => { a.Element("ApiNumber").Remove(); a.Element("MetaData").Remove(); });
PS。请记住,如果按照这些说明保存xml2文件,它们将没有ApiNumber和MetaData子节点,因为您刚刚删除了它们。如果仅按照@MindSwipe的建议创建nee节点,则不会发生这种情况。
希望我有用