2017-05-08 12 views
1

1つの値がnullの場合、LINQを使用してXMLから2つの要素を削除します。私が試したことは、このでした:linqを使用してXMLの2つの要素を削除します

xml.Descendants("MarketingSpecial") 
    .Where(Function(m) Document.Descendants("MarketingPrice").Value() = "0.00") 
    .Remove() 
xml.Descendants("MarketingPrice") 
    .Where(Function(m) m.Value() = "0.00") 
    .Remove() 

しかし、それは正しくMarketingPriceを削除しますが、どこでもMarketingSpecialを削除します。 MarketingPriceを削除すると、MarketingSpecialのみを削除できますか?

次のようにXMLがフォーマットされます。

<Inventory pt="0.159"> 
    <Vehicle> 
     <MarketingSpecial><![CDATA[ Yes ]]></MarketingSpecial> 
     <MarketingPrice>0.00</MarketingPrice> 
    </Vehicle> 
</Inventory> 
+0

XMLはどのようにフォーマットされていますか? 'Special'では' Price'の単一の子孫ではなく 'Document.Descendants'を見ています。スペシャルの下に価格はありますか? – krillgar

+0

@krillgar私は先に進み、xmlのフォーマットで答えを編集しました – Cowmoogun

答えて

1

任意のとは対照的に、あなたは兄弟MarketingPriceを探してくださいツリー全体の中でMarketingSpecialMarketingPriceを探しています。 Where句中にあなたの関数内

xml.Descendants("MarketingSpecial") 
    .Where(Function(m) m.ParentNode().Descendants("MarketingPrice").Value() = "0.00") 
    .Remove() 

、あなたのmは、現在MarketingSpecialノードです。親に行って、その子孫のMarketingPriceを確認してください。それはあなたが探しているものをあなたに与えるでしょう。

0

あなたは同じクエリで削除する必要がある要素を選択することができます。

xml.Descendants("Vehicle").Where(Function(m) m.Element("MarketingPrice").Value() = "0.00") 
          .SelectMany(Function(e) e.Elements() 
                .Where(Function(x) x.Name="MarketingSpecial" 
                    Or x.Name="MarketingPrice")) 
          .Remove() 
+0

残念ながらそうではありませんが、XMLの一部である省略したその他の情報があります。私はこれらの2つの要素だけを取り除かなければなりません。 – Cowmoogun

+0

よろしくお願いします。 – octavioccl

+0

@Cowmoogun、私の更新された回答を確認してください – octavioccl

関連する問題