读取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并更改坐标

如果您有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);
    }
}