如何解析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
时,无法确定如何以不区分大小写的方式执行此操作。
答案 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