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