gpt4 book ai didi

c# - OpenStreetMap XML 到对象

转载 作者:行者123 更新时间:2023-11-30 22:01:00 27 4
gpt4 key购买 nike

我有以下 XML,我想通过使用 XDocument 获取特定值。例如最大速度。

<?xml version="1.0" encoding="UTF-8"?>
<osm version="0.6" generator="Overpass API">
<meta osm_base="2015-01-15T20:26:03Z"/>
<node id="1312239864" lat="50.5348877" lon="5.6286790">
<tag k="highway" v="crossing"/>
<tag k="traffic_calming" v="bump"/>
</node>
<node id="2025084665" lat="50.5345623" lon="5.6274183">
<tag k="traffic_calming" v="choker"/>
</node>
<node id="2025084669" lat="50.5353414" lon="5.6303289"/>
<way id="191950462">
<nd ref="2025084665"/>
<tag k="bicycle" v="yes"/>
<tag k="highway" v="secondary"/>
<tag k="maxspeed" v="30"/>
<tag k="name" v="Rue d'Esneux"/>
<tag k="source:maxspeed" v="school zone"/>
</way>
</osm>

我试过了

way.Tags = (List<OSMTag>)(doc.Descendants ("tag").Select (c => new OSMTag () {
Key = c.Attribute ("k").Value,
Value = c.Attribute ("v").Value
}));

但是我得到一个 InvalidCastException。

下面是我的对象模型。

public class OSMWay
{
public OSMWay (){}
public List<OSMTag> Tags { get; set; }
}

public class OSMTag
{
public OSMTag (){}

public OSMTag (string key, string value)
{
Key = key;
Value = value;
}
public string Key { get; set; }
public string Value { get; set; }
}

最佳答案

你得到一个 IEnumerable 返回:

way.Tags = doc.Descendants ("tag").Select (c => new OSMTag () {
Key = c.Attribute ("k").Value,
Value = c.Attribute ("v").Value
}).ToList();

应该可以解决问题。列表实现 IEnumerable 但并非每个 IEnumerable 都是列表。 ToList() 扩展将 IEnumerable 转换为列表

关于c# - OpenStreetMap XML 到对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28090438/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com