【问题标题】:Xelement paring issue case insensitiveXelement 配对问题不区分大小写
【发布时间】:2016-11-05 23:10:26
【问题描述】:

如何将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 表达式可以帮助你。类似于: if(myItem.Element.Where(w=> w.Name.ToLower() == "hyperlinkfields).Any())
  • 我试过这个,但不能,myItem.Element 是一种方法

标签: c# xml-parsing xelement


【解决方案1】:

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

如果您阅读文档,Element 方法返回 first(按文档顺序)具有指定 XName 的子元素,因此您可以使用自定义代码并实现相同的行为。

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

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

【讨论】:

  • 没问题,很高兴对您有所帮助。
【解决方案2】:

试试 lambda 表达式:

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

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

【讨论】:

    【解决方案3】:

    请原谅 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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-12-07
      • 1970-01-01
      • 1970-01-01
      • 2018-06-02
      • 1970-01-01
      • 2016-09-30
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多