Xelement 配对问题不区分大小写

Xelement paring issue case insensitive

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

myItem 包含一个名为 HyperLinkFields 的字段时,这工作正常,但是当字段名称为 HyperlinkFields 时,由于不区分大小写的方式,无法弄清楚如何做到这一点。

试试 lambda 表达式:

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

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

Xml 区分大小写,可以有同名但大小写不同的元素,这是完全有效的。

如果你阅读了文档,Element方法returns 首先(按文档顺序)具有指定XName的子元素,所以您可以使用自定义代码并实现相同的行为。

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

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

请见谅VB。这会找到不考虑名称大小写的元素。请注意,它会找到所有 level3 元素。

    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