如何使用Linq删除不需要的Xml节点并仅选择所需的节点并存储到C#中的变量?

问题描述 投票:0回答:1

通过将两个文件中的API编号匹配,我将钻取详细信息从第二个xml文件复制到第一个xml文件。我已将其合并到wellbore标签下,但我想删除<APINUMBER>标签内的标签<METADATA><DRILLINGPERMIT>,因为在合并的Xm​​l中,它已经在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();
 }
c# xml linq merge xelement
1个回答
0
投票

我应该发表评论,但是我仍然不能写它们。

无论如何,如果您不创建新节点,则必须从DrillingPermit节点中手动删除ApiNumer和MetaData节点作为子节点。

所以它看起来像:

apilists.foreach(a => { a.Element("ApiNumber").Remove(); a.Element("MetaData").Remove(); });

PS。请记住,如果按照这些说明保存xml2文件,它们将没有ApiNumber和MetaData子节点,因为您刚刚删除了它们。如果仅按照@MindSwipe的建议创建nee节点,则不会发生这种情况。

希望我有用

© www.soinside.com 2019 - 2024. All rights reserved.