使用GML/ c# /LINQ将各种xml元素组合成一个集合
本文关键字:集合 一个 组合 xml LINQ GML 使用 元素 | 更新日期: 2023-09-27 18:04:31
我正在尝试用c#读取GML文件。我想将所有返回的数据存储在一个对象中。到目前为止,我已经能够返回所有的数据,但在3个单独的对象:
XDocument doc = XDocument.Load(fileName);
XNamespace gml = "http://www.opengis.net/gml";
// Points
var points = doc.Descendants(gml + "Point")
.Select(e => new
{
POSLIST = (string)e.Element(gml + "pos")
});
// LineString
var lineStrings = doc.Descendants(gml + "LineString")
.Select(e => new
{
POSLIST = (string)e.Element(gml + "posList")
});
// Polygon
var polygons = doc.Descendants(gml + "LinearRing")
.Select(e => new
{
POSLIST = (string)e.Element(gml + "posList")
});
我不想创建3个单独的对象,我想创建一个对象,如下所示:
var all = doc.Descendants(gml + "Point")
doc.Descendants(gml + "LineString")
doc.Descendants(gml + "LinearRing")....
但是需要一些帮助。事先感谢。
样本数据:<gml:Point>
<gml:pos>1 2 3</gml:pos>
</gml:Point>
<gml:LineString>
<gml:posList>1 2 3</gml:posList>
</gml:LineString>
<gml:LinearRing>
<gml:posList>1 2 3</gml:posList>
</gml:LinearRing>
您可以使用Concat
:
XDocument doc = XDocument.Load(fileName);
XNamespace gml = "http://www.opengis.net/gml";
var all = doc.Descendants(gml + "Point")
.Concat(doc.Descendants(gml + "LineString"))
.Concat(doc.Descendants(gml + "LinearRing"));
要获取作为内部元素的值,您可以这样做:
XDocument doc = XDocument.Load("data.xml");
XNamespace gml = "http://www.opengis.net/gml";
var all = doc.Descendants(gml + "Point")
.Select(e => new { Type = e.Name, Value = (string)e.Element(gml + "pos") })
.Concat(doc.Descendants(gml + "LineString")
.Select(e => new { Type = e.Name, Value = (string)e.Element(gml + "posList") }))
.Concat(doc.Descendants(gml + "LinearRing")
.Select(e => new { Type = e.Name, Value = (string)e.Element(gml + "posList") }));