2017-01-15 4 views
1

に値でのXElementを取得する方法をXMLに:LINQのは、私は、XMLを持っているのC#

XElement xDoc = XElement.Load("File.xml");     
var x= xDoc.Descendants("Field").Where(elem => elem.Value == "DEMOFIELD");//returns no element 

これは戻っていないもの:

<?xml version="1.0" encoding="utf-8"?> 
<Fields> 
    <Field> 
    <Name>DEMOFIELD</Name> 
    <Category>HardwareSoftwareRequirement</Category> 
    </Field> 
</Fields> 

私はこれを行う

。私が代わりにこれを行うときには:反復で

var x= xDoc.Descendants("Field").Where(elem => elem.Value.Contains("DEMOFIELD"));//returns no element 

、代わりのe.Valueを、それが返されます。DEMOFIELDHardwareSoftwareRequirement、それだけでDEMOFIELDをすることはできませんか?その後、

、あなたが右の要素の値を比較していることを確認する必要があります値、

foreach(XElement e in x) 
{ 
    _log.Debug(e.Value);//no value here 
} 

答えて

1

コード:カテゴリを取得したい場合は、あなたのような何かをする必要がありますので、

var xml = @"<?xml version=""1.0"" encoding=""utf-8""?> 
<Fields> 
    <Field> 
    <Name>DEMOFIELD</Name> 
    <Category>HardwareSoftwareRequirement</Category> 
    </Field> 
</Fields>"; 
var xdoc = XDocument.Load(new StringReader(xml)); 
var x = xdoc.Descendants("Field").Where(elem => elem.Element("Name")?.Value == "DEMOFIELD"); 

あなたはまだ、今Field要素を持っていますポストはノードごとに値を取得しますが、探しているノードではありません。

xDoc.Descendants("Field")は、 "Field"という名前のすべてのノードを選択しますが、そのノードには子ノードのみがあります。そのノード上で.Valueと呼ぶと、その値はすべての子の値( "DEMOFIELD" + "HardwareSoftwareRequirement" = "DEMOFIELDHardwareSoftwareRequirement")の連結によって計算されます。どちらかの値で、すべての「名前」ノードとフィルタを選択するか、「名前」と呼ばれる子ノードの値をチェックするために必要なもの、あなたが実際にあなたを探しに応じて、

:あなたのソリューションを実行している

var nameByValue = xDoc.Descendants("Name") 
     .Where(elem => elem.Value == "DEMOFIELD"); 
    var fieldByChildValue = xDoc.Descendants("Field") 
     .Where(elem => elem.Element("Name").Value == "DEMOFIELD"); 
+0

ありがとう@Alexei ...これは私が実際に逃したものです: - フィールドの代わりに名前で選択 – osagie

1

を得るために反復処理は、ネストされたXMLと、これは間違って取得するのは簡単です。あなたの場合、Field要素の値(連結されたすべての内部値になります)を比較していますが、これをName要素と比較することを意味します。

これを試してみてください:で

x.First().Element("Category").Value 
+0

はまだ同じ問題を与えます。 xを反復して反復変数の値を出力すると、DEMOFIELD – osagie

+0

の代わりにDEMOFIELDHardwareSoftwareRequirementが残っています。はい、これは 'Field'要素を持つため、印刷している値です。ここで、気になる部分を選択する必要があります。 – Stuart

+0

'x.First()。Element(" Category ")のようなもの。値' – Stuart

関連する問題