kml文件格式如下(名字不在一行):
<Placemark>
<name>W4 某某河
(二干河) 码头大桥</name>
<description/>
<styleUrl>#1622920240</styleUrl>
<Point>
<coordinates>
120.598822372,31.754117983,6.332
</coordinates>
</Point>
</Placemark>
代码:
//XmlData是file.ReadAllLines读取。
//WriteFile为StreamWriter写入txt
if (XmlData.Length<1)
{
return;
}
string strArr = string.Empty;
string Startstr = "<Placemark>";
string Endstr = "</Placemark>";
//获得点的存放块 位置
for (int i=0;i<XmlData.Length;i++)
{
if(XmlData[i].Contains(Startstr))
{
strArr = strArr + i.ToString()+"|";
}
if(XmlData[i].Contains(Endstr))
{
strArr = strArr + i.ToString() + ",";
}
}
strArr = strArr.Substring(0, strArr.Length - 1);
string[] Arr = strArr.Split(',');
string Lines = string.Empty;
for(int i=0;i<Arr.Length;i++)
{
//数组中0 是开始行,1是结束行
string[] tmp = Arr[i].Split('|');
//名字未出错处理
string tmpName = XmlData[int.Parse(tmp[0]) + 1];
//出错行处理标记
int isAllName = tmpName.IndexOf("</name>");
//行计数
int iRow = -1;
string Name = string.Empty;
string tmpLatLon = string.Empty;
//如果名字分成多行的出错处理
if (isAllName == -1)
{
for(int j=int.Parse(tmp[0])+1;j< int.Parse(tmp[1]);j++)
{
string a = XmlData[j];
bool T = a.Contains("</name>");
if (T)
{
iRow = j;
break;
}
}
string tmpvalue = string.Empty;
for(int n= int.Parse(tmp[0])+1; n<=iRow;n++)
{
tmpvalue = tmpvalue + XmlData[n];
}
tmpName = tmpvalue;
}
//未出错取值位置
int Namestart = tmpName.IndexOf(">");
int NameEnd = tmpName.IndexOf("</name>");
Name = tmpName.Substring(Namestart+1, NameEnd-Namestart-1);
if (iRow > 0)
{
for(int n=iRow;n<int.Parse(tmp[1]);n++)
{
string coord = XmlData[n];
bool T = coord.Contains("<coordinates>");
if(T)
{
tmpLatLon = XmlData[n + 1].Trim();
}
}
}else
{
tmpLatLon = XmlData[int.Parse(tmp[0]) + 6].Trim();
}
Lines = Lines + Name + "," + tmpLatLon+"\r\n";
}
if (Lines.Length > 0)
{
WriteFile(Lines, SaveFileName);
}