Xelement配对问题不区分大小写

时间:2016-07-04 09:17:14

标签: c# xml-parsing 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(',');
    }
}

myItem包含名为HyperLinkFields的字段时,此功能正常,但当字段名称为HyperlinkFields时,无法确定如何以不区分大小写的方式执行此操作。

3 个答案:

答案 0 :(得分:3)

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(','); } 首先(按文档顺序)子元素,因此您可以使用自定义代码并实现同样的行为。

{{1}}

答案 1 :(得分:1)

尝试lambda表达式:

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

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

答案 2 :(得分:0)

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