2016-07-04 20 views
0

Wie wird XElement als case insensitive analysiert?Xelement parenting issue case insensitive

Hier ist mein Code:

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(','); 
    } 
} 

Dies funktioniert gut, wenn myItem ein Feld HyperLinkFields genannt enthält, aber wenn der Feldname ist HyperlinkFields kann nicht herausfinden, wie es als Groß- und Kleinschreibung Weise zu tun.

+0

Vielleicht hilft Ihnen ein Lambda-Ausdruck. Etwas wie: if (myItem.Element.Where (w => w.Name.ToLower() == "hyperlinkfields) .Any()) – Rumpelstinsk

+0

ich habe das versucht, aber kann nicht, myItem.Element ist eine Methode – AhammadaliPK

Antwort

2

Xml ist empfindlich Fall könnte ein Element mit demselben Namen, aber unterschiedlichem Fall, die perfekt gültig ist.

Wenn Sie die Dokumentation lesen, Element Methode gibt erste (in der Reihenfolge des Dokuments) untergeordnetes Element mit dem angegebenen XName, so dass Sie mit benutzerdefinierten Code und erreichen das gleiche Verhalten spielen könnte.

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

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

funktioniert wie ein Charme, danke – AhammadaliPK

+0

Kein Problem, froh, dass es Ihnen geholfen hat. –

1

Try Lambda-Ausdruck:

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

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

lass mich es versuchen dies – AhammadaliPK

0

Entschuldigung die VB. Dies findet Elemente unabhängig von ihrem Namen. Beachten Sie, dass es alle level3-Elemente findet.

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