2016-07-04 21 views
0

XElementを大文字と小文字を区別しないで解析する方法は?ここでXelementのパースの問題の大文字と小文字を区別しない

は私のコードです:

private void GetMyLayer(XElement myElement) 
{ 
    Layer layer = new Layer(); 
    foreach (var myItem in myElement.Descendants("layeritem")) 
    { 
     if (myItem.Element("HyperLinkFields") != null) 
      layer.ClickableHyperLinkFields = gisItem.Element("HyperLinkFields").Value.Split(','); 
    } 
} 

myItemHyperLinkFieldsと呼ばれるフィールドが含まれている場合、これは正常に動作しているが、フィールド名がHyperlinkFieldsときに大文字小文字を区別しない方法として、それを行う方法を見つけ出すことはできません。

+0

おそらくラムダ表現が役立ちます。何かが好きです:if(myItem.Element.Where(w => w.Name.ToLower()== "hyperlinkfields").Any()) – Rumpelstinsk

+0

私はこれを試してみましたが、myItem.Elementはメソッドです – AhammadaliPK

答えて

2

Xmlは大文字と小文字が区別され、1は完全に有効である同じ名前の要素が異なる場合に、持っている可能性があります。あなたがドキュメントを読む場合は、カスタムコードで遊ぶと同じ動作を実現することができるように

は、Element方法は、XName指定と最初(ドキュメント順で)子要素を返します。

var element = myItem.Elements() 
        .FirstOrDefault(x=>x.Name.LocalName.Equals(searchstring, StringComparison.OrdinalIgnoreCase)); 

if(element != null) 
{ 
    // Your logic 
    //layer.ClickableHyperLinkFields = element.Value.Split(','); 
} 
+0

これは魅力のように動作します、ありがとうございます – AhammadaliPK

+0

問題なし、それはあなたを助けてうれしいです。 –

1

てみラムダ式:

var yourItems = myItem.Elements().Where(e => e.Name.LocalName.ToString().ToLowerInvariant() == "HyperLinkFields".ToLowerInvariant()); 

if(yourItems.Count() > 0) { 
    //do what you want here... 
} 
+0

私に試してみましょうこの – AhammadaliPK

0

VBを申し訳ありません。これは、名前の大文字小文字に関係なく要素を検索します。レベル3のすべての要素が検索されます。

Dim someXML As XElement 
    ' someXML = XElement.Load("path here") 'to load from file/uri 
    ' for testing 
    someXML = <root> 
        <level1 num="1"> 
         <level2 num="1"> 
          <LeveL3 num="1">l3 one</LeveL3> 
          <level3 num="2">l3 two</level3> 
         </level2> 
         <level2 num="2"> 
          <lEVEl3 num="3">l3 one</lEVEl3> 
         </level2> 
        </level1> 
        <level1 num="1"> 
         <level2 num="2"> 
          <LEVel3 num="3">l3 one</LEVel3> 
         </level2> 
        </level1> 
       </root> 

    For Each xe As XElement In someXML...<level2>.Elements 
     If xe.Name.LocalName.ToLower.Equals("level3") Then 
      xe.Value = "found" ' just to show that ALL were found 
     End If 
    Next 
関連する問題