读取xml并更改坐标
本文关键字:坐标 xml 读取 | 更新日期: 2023-09-27 18:21:14
我有这个:
private void button1_Click(object sender, EventArgs e)
{
XmlDataDocument xmldoc = new XmlDataDocument();
XmlNodeList xmlnode;
int i = 0;
string str = null;
FileStream fs = new FileStream("c:''CoordinatesWessel.xml", FileMode.Open, FileAccess.Read);
xmldoc.Load(fs);
xmlnode = xmldoc.GetElementsByTagName("Placemark");
for (i = 0; i <= xmlnode.Count - 1; i++)
{
xmlnode[i].ChildNodes.Item(0).InnerText.Trim();
str = xmlnode[i].ChildNodes.Item(0).InnerText.Trim() + " | " + xmlnode[i].ChildNodes.Item(1).InnerText.Trim() + " | " + xmlnode[i].ChildNodes.Item(2).InnerText.Trim();
MessageBox.Show(str);
}
}
但后来我得到了错误:
根级别的数据无效。第3行,位置1。
坐标:4.706157049383036,52.5855355887998148
必须是:52.58555554707493844.705250339613652,因此才能切换。
这是xml:
<punten>
<Placemark>
<OBJNR>50</OBJNR>
<OBJOMSCHRI>houtwal</OBJOMSCHRI>
<LANGEOMSCH>Houtwal gelegen in het verlengde van de Hoogelaan, oostelijk van de Oosterzijweg, als noordelijke begeleiding van de oprijweg naar het buurtschap Oosterzij</LANGEOMSCH>
<coordinates>4.705250339613652,52.585555470749384</coordinates>
</Placemark>
<Placemark>
<OBJNR>9</OBJNR>
<OBJOMSCHRI>boerderij-erf</OBJOMSCHRI>
<LANGEOMSCH>Locatie aan de Oosterzijweg 126, huisplaats in de buurtschap �Oosterzij�, die al op de kadastrale minuut van 1820 staat; kenmerkende ligging op overgang strandwal-strandvlakte, Middeleeuwen</LANGEOMSCH>
<coordinates>4.706157049383036,52.585355887998148</coordinates>
</Placemark>
<Placemark>
<OBJNR>10</OBJNR>
<OBJOMSCHRI>boerderij-erf</OBJOMSCHRI>
<LANGEOMSCH>Locatie aan de Oosterzijweg 128, huisplaats in de buurtschap �Oosterzij�, die al op de kadastrale minuut van 1820 staat; kenmerkende ligging op overgang strandwal-strandvlakte, Middeleeuwen</LANGEOMSCH>
<coordinates>4.706104122837083,52.585111280466329</coordinates>
</Placemark>
</punten>
谢谢
但是如何恢复坐标:
4.70525033961365252.5855555470749384
到此:
52.58555554707493844.705250339613652
感谢
如果您有xml poco,那么:
punten puntenVariable;
if (xmlString.Deserialize(out puntenVariable))
{
//do something, ex: swap coordinates
foreach (var item in puntenVariable.Placemark)
{
item.coordinates = string.Join(",",item.coordinates.Split(',').Reverse());
}
}
ref:反序列化的扩展方法
Poco:
[System.Xml.Serialization.XmlTypeAttribute(AnonymousType = true)]
[System.Xml.Serialization.XmlRootAttribute(Namespace = "", IsNullable = false)]
public partial class punten
{
[System.Xml.Serialization.XmlElementAttribute("Placemark")]
public puntenPlacemark[] Placemark { get; set; }
}
[System.Xml.Serialization.XmlTypeAttribute(AnonymousType = true)]
public partial class puntenPlacemark
{
public byte OBJNR { get; set; }
public string OBJOMSCHRI { get; set; }
public string LANGEOMSCH { get; set; }
public string coordinates { get; set; }
}
在你的情况下,它可能看起来像:
const string path = "c:''CoordinatesWessel.xml";
const string path2 = "c:''CoordinatesWessel2.xml";
punten puntenVariable;
if (File.Exists(path) && File.ReadAllText(path).Deserialize(out puntenVariable))
{
foreach (var item in puntenVariable.Placemark)
{
item.coordinates = string.Join(",",item.coordinates.Split(',').Reverse());
}
var ser = new XmlSerializer(typeof(punten));
using (var writer = XmlWriter.Create(path2))
{
ser.Serialize(writer, puntenVariable);
}
}