Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何使用C将数据附加到XML文件#_C#_.net_Xml_Winforms - Fatal编程技术网

C# 如何使用C将数据附加到XML文件#

C# 如何使用C将数据附加到XML文件#,c#,.net,xml,winforms,C#,.net,Xml,Winforms,我在图片框中加载了一个图像。当我单击图像时,会有一些数据(此处不需要)存储在XML文件中。但问题是当我在图像上单击鼠标时,数据正在被重写。相反,我需要添加每次鼠标单击后获得的数据。这是我在MouseClick事件下的程序部分 private void pictureBox1_MouseClick(object sender, MouseEventArgs e) { float u = l[p + 1] - l[p]; float v = m[p + 1]

我在图片框中加载了一个图像。当我单击图像时,会有一些数据(此处不需要)存储在XML文件中。但问题是当我在图像上单击鼠标时,数据正在被重写。相反,我需要添加每次鼠标单击后获得的数据。这是我在MouseClick事件下的程序部分

private void pictureBox1_MouseClick(object sender, MouseEventArgs e)
{            
    float u = l[p + 1] - l[p];
    float v = m[p + 1] - m[p];
    float w = (e.Y - m[p]) / v; //subtract from latitude
    float z = (e.X - l[p]) / u; //add to longitude.
    float latmin = h[p] - w;
    float longmin = j[p] + z;

    A1 = e.X - c[p];
    A2 = e.Y - d[p];
    B1 = c[p + 1] - c[p];
    B2 = d[p + 1] - d[p];
    A = Math.Sqrt(Math.Pow(A1, 2) + Math.Pow(A2, 2));
    B = Math.Sqrt(Math.Pow(B1, 2) + Math.Pow(B2, 2));
    dotproduct = A1 * B1 + A2 * B2;
    theta = (180 / Math.PI) * Math.Acos( dotproduct / (A * B));
    if (e.X < c[p])
    {
        theta1 = 360 - theta;
    }
    else
    {
        theta1 = theta;
    }

    MessageBox.Show(string.Format(" Latitude:{0}°{1:0.0}'\n Longitude:{2}°{3:0.0}' \n ICAO LOC: {4} {5}", g[p] + (int)latmin / 60, latmin % 60, i[p] + (int)longmin / 60, longmin % 60, textBox1.Text, Math.Abs((int)theta1)));

    using (XmlWriter writer = XmlWriter.Create(string.Format("{0}.xml", textBox2.Text)))
    {
        writer.WriteStartDocument();
        writer.WriteStartElement("WayPoints");

         writer.WriteStartElement("Latitude");
         writer.WriteElementString("Degrees",XmlConvert.ToString( g[p] + (int)latmin / 60));
         writer.WriteElementString("Minutes", XmlConvert.ToString(latmin % 60));
         writer.WriteEndElement();

        writer.WriteStartElement("Longitude");
        writer.WriteElementString("Degrees", XmlConvert.ToString(i[p] + (int)longmin / 60));
        writer.WriteElementString("Minutes", XmlConvert.ToString(longmin % 60));
        writer.WriteEndElement();

        writer.WriteStartElement("IcaoLocator");
        writer.WriteElementString("Type", textBox1.Text);
        writer.WriteElementString("Angle", XmlConvert.ToString(Math.Abs((int)theta1)));
        writer.WriteEndElement();

        writer.WriteEndElement();
        writer.WriteEndDocument();
    }
}
private void pictureBox1\u鼠标单击(对象发送器,MouseEventArgs e)
{            
浮点数u=l[p+1]-l[p];
浮点数v=m[p+1]-m[p];
浮点数w=(e.Y-m[p])/v;//从纬度中减去
float z=(e.X-l[p])/u;//添加到经度。
浮动latmin=h[p]-w;
浮动长min=j[p]+z;
A1=e.X-c[p];
A2=e.Y-d[p];
B1=c[p+1]-c[p];
B2=d[p+1]-d[p];
A=Math.Sqrt(Math.Pow(A1,2)+Math.Pow(A2,2));
B=Math.Sqrt(Math.Pow(B1,2)+Math.Pow(B2,2));
点积=A1*B1+A2*B2;
θ=(180/Math.PI)*Math.Acos(点积/(A*B));
if(e.X
XML的文件名取自textbox2中的文本

请给我一些建议,这样我可以将所有鼠标单击的数据存储在一个文件中。

我将在类内使用的实例,并在任何鼠标单击时为其指定适当的节点。您可以每次将文档保存在磁盘上(效率不高,但如果文件不太大,您不会注意到任何性能下降),或者在其他环境中延迟保存(显式按钮或窗口关闭)

我将在类中使用的实例,并在任何鼠标单击时使用适当的节点。您可以每次将文档保存在磁盘上(效率不高,但如果文件不太大,您不会注意到任何性能下降),或者在其他情况下延迟保存(显式按钮或窗口关闭)

使用

其思想是有一个保存文档声明的“主”文件和一个保存内部节点的“子”文件。在这种情况下,您只需将文本附加到子文件中,主文件将保持有效

master.xml文件:

<?xml version="1.0"?>

<WayPoints xmlns:xi="http://www.w3.org/2001/XInclude">
    <xi:include href="slave.xmlpart"/>
</WayPoints>
然而,Xdocument类似乎没有遵循includes,但本文展示了一个解决方案:

使用

其思想是有一个保存文档声明的“主”文件和一个保存内部节点的“子”文件。在这种情况下,您只需将文本附加到子文件中,主文件将保持有效

master.xml文件:

<?xml version="1.0"?>

<WayPoints xmlns:xi="http://www.w3.org/2001/XInclude">
    <xi:include href="slave.xmlpart"/>
</WayPoints>

但是,Xdocument类似乎没有遵循includes,但本文展示了一个解决方案:

您可以看看如何使用Xdocument,它是System.Xml.Linq命名空间的一部分。这种形式的XML文档利用公共liq功能,为您提供了一个更容易阅读和修改XML文档的API。详细说明它的MSDN链接

要添加节点,可以执行以下操作:

XDocument xmlDocument = XDocument.Load("FilePath");
XElement parentNode = xmlDocument.Root.Element("ParentNode");
XElement node = new XElement("NodeName"); 
parentNode.Add(node);
xmlDocument.Save("FilePath");
这是一个简单的示例,没有实现任何空检查,并且假设父节点只有一个实例

希望有帮助


Paul

您可以使用XDocument,它是System.Xml.Linq命名空间的一部分。这种形式的XML文档利用公共liq功能,为您提供了一个更容易阅读和修改XML文档的API。详细说明它的MSDN链接

要添加节点,可以执行以下操作:

XDocument xmlDocument = XDocument.Load("FilePath");
XElement parentNode = xmlDocument.Root.Element("ParentNode");
XElement node = new XElement("NodeName"); 
parentNode.Add(node);
xmlDocument.Save("FilePath");
这是一个简单的示例,没有实现任何空检查,并且假设父节点只有一个实例

希望有帮助


Paul

一般观察,一些注释会使代码在数学算法方面更具可读性。数学代码在这里并不重要,因为它没有问题。唯一的问题是如何将所有数据存储在一个文件中。是的,我知道,正如我所说的,一般观察:)一般观察,一些注释将使代码在数学算法方面更具可读性。数学代码在这里并不重要,因为它没有问题。唯一的问题是如何将所有数据存储在一个文件中。是的,我知道,正如我所说,一般观察:)你能帮我用c#编写代码吗,我必须添加。因为我对C#和XML都是新手。你使用的是哪个版本的.NEt?你能帮我添加C#中的代码吗?因为我对C#和XML都是新手。你使用的是哪个版本的.NEt?是的,这很有帮助,但如果你能给出关于我的代码的更详细的解决方案,这会更有帮助。由于我正在实现mouseclick事件,我不确定在何处实现父节点,即在事件内部或外部。如果没有看到您的模式,这有点困难,但我想说,您可能希望将met的职责分开