C# 元素添加到错误的位置,如何添加另一个子元素?
我编写了以下代码:C# 元素添加到错误的位置,如何添加另一个子元素?,c#,.net,xml,xml-parsing,C#,.net,Xml,Xml Parsing,我编写了以下代码: public static void AddUploadToXML(XDocument xdoc, int id, string fileHash, string fileName) { var singleUpload = new XElement("upload", new XAttribute("backupid", id), new XElement("file", fileHash),
public static void AddUploadToXML(XDocument xdoc, int id, string fileHash, string fileName)
{
var singleUpload = new XElement("upload",
new XAttribute("backupid", id),
new XElement("file", fileHash),
new XAttribute("filename", fileName)
);
xdoc.Root.Add(singleUpload);
}
实际上,我希望得到如下XML:
<uploads>
<upload backupid="3" >
<file filename=""></file>
</upload>
</uploads>
<uploads>
<upload backupid="3" filename="">
<file></file>
</upload>
</uploads>
<uploads>
<upload backupid="3" >
<file filename="Test.001">HASHCODE</file>
<file filename="Test.002">HASHCODE2</file>
<file filename="Test.003">HASHCODE3</file>
</upload>
<upload backupid="4" >
<file filename="Test2.001">HASHCODE</file>
(...)
</upload>
</uploads>
public static void AddUploadToXML(XDocument xdoc, int id, string fileHash, string fileName)
{
var singleUpload = new XElement("upload",
new XAttribute("backupid", id),
new XElement("file", fileHash,
new XAttribute("filename", fileName))
);
xdoc.Root.Add(singleUpload);
}
但我最后说了这样的话:
<uploads>
<upload backupid="3" >
<file filename=""></file>
</upload>
</uploads>
<uploads>
<upload backupid="3" filename="">
<file></file>
</upload>
</uploads>
<uploads>
<upload backupid="3" >
<file filename="Test.001">HASHCODE</file>
<file filename="Test.002">HASHCODE2</file>
<file filename="Test.003">HASHCODE3</file>
</upload>
<upload backupid="4" >
<file filename="Test2.001">HASHCODE</file>
(...)
</upload>
</uploads>
public static void AddUploadToXML(XDocument xdoc, int id, string fileHash, string fileName)
{
var singleUpload = new XElement("upload",
new XAttribute("backupid", id),
new XElement("file", fileHash,
new XAttribute("filename", fileName))
);
xdoc.Root.Add(singleUpload);
}
另一个问题是:
1.如何在应用程序的其他部分修改该文件名属性(它将是具有给定ID的upload元素下的第一个文件元素)
2.然后,如何添加其他文件元素,以完成如下操作:
<uploads>
<upload backupid="3" >
<file filename=""></file>
</upload>
</uploads>
<uploads>
<upload backupid="3" filename="">
<file></file>
</upload>
</uploads>
<uploads>
<upload backupid="3" >
<file filename="Test.001">HASHCODE</file>
<file filename="Test.002">HASHCODE2</file>
<file filename="Test.003">HASHCODE3</file>
</upload>
<upload backupid="4" >
<file filename="Test2.001">HASHCODE</file>
(...)
</upload>
</uploads>
public static void AddUploadToXML(XDocument xdoc, int id, string fileHash, string fileName)
{
var singleUpload = new XElement("upload",
new XAttribute("backupid", id),
new XElement("file", fileHash,
new XAttribute("filename", fileName))
);
xdoc.Root.Add(singleUpload);
}
哈希码
哈希代码2
哈希代码3
哈希码
(...)
您需要这样的数组对象[]
public static void AddUploadToXML(XDocument xdoc, int id, string fileHash, string fileName)
{
var singleUpload = new XElement("upload", new object[] {
new XAttribute("backupid", id),
new XElement("file", new object[] {new XAttribute("filename", fileName), fileHash})
});
xdoc.Root.Add(singleUpload);
}
您需要这样一个数组对象[]
public static void AddUploadToXML(XDocument xdoc, int id, string fileHash, string fileName)
{
var singleUpload = new XElement("upload", new object[] {
new XAttribute("backupid", id),
new XElement("file", new object[] {new XAttribute("filename", fileName), fileHash})
});
xdoc.Root.Add(singleUpload);
}
首先,您应该将方法更改为smth,如下所示:
<uploads>
<upload backupid="3" >
<file filename=""></file>
</upload>
</uploads>
<uploads>
<upload backupid="3" filename="">
<file></file>
</upload>
</uploads>
<uploads>
<upload backupid="3" >
<file filename="Test.001">HASHCODE</file>
<file filename="Test.002">HASHCODE2</file>
<file filename="Test.003">HASHCODE3</file>
</upload>
<upload backupid="4" >
<file filename="Test2.001">HASHCODE</file>
(...)
</upload>
</uploads>
public static void AddUploadToXML(XDocument xdoc, int id, string fileHash, string fileName)
{
var singleUpload = new XElement("upload",
new XAttribute("backupid", id),
new XElement("file", fileHash,
new XAttribute("filename", fileName))
);
xdoc.Root.Add(singleUpload);
}
至于第二个问题:您应该加载xml文件或解析xml字符串
XElement.Load(file path) / XElement.Parse(xml string)
然后您需要按Id查找所需的“上载”节点,并添加新的“文件”节点:
首先,您应该将方法更改为smth,如下所示:
<uploads>
<upload backupid="3" >
<file filename=""></file>
</upload>
</uploads>
<uploads>
<upload backupid="3" filename="">
<file></file>
</upload>
</uploads>
<uploads>
<upload backupid="3" >
<file filename="Test.001">HASHCODE</file>
<file filename="Test.002">HASHCODE2</file>
<file filename="Test.003">HASHCODE3</file>
</upload>
<upload backupid="4" >
<file filename="Test2.001">HASHCODE</file>
(...)
</upload>
</uploads>
public static void AddUploadToXML(XDocument xdoc, int id, string fileHash, string fileName)
{
var singleUpload = new XElement("upload",
new XAttribute("backupid", id),
new XElement("file", fileHash,
new XAttribute("filename", fileName))
);
xdoc.Root.Add(singleUpload);
}
至于第二个问题:您应该加载xml文件或解析xml字符串
XElement.Load(file path) / XElement.Parse(xml string)
然后您需要按Id查找所需的“上载”节点,并添加新的“文件”节点:
为文件制作另一个XElement。在singleUpload元素中添加该元素,我更希望您使用XML可序列化标记。为上传、文件等创建易于管理、自动的类,我同意@FaisalHafeez的观点,不要这样做复杂(甚至简单)的xml。另一方面,这个问题的质量让我相信您很难使用xml,因此我的实际建议是,在您回来解决这个问题之前,先用xml做点手脚。谢谢您的想法!你有这样的例子吗?@flindeberg:我需要xml,因为随着时间的推移,这个文件“数据库”应该由数千条记录组成。是的,我对xml有很多令人眩晕的问题,我找不到一个简单而简洁的教程:-(为文件创建另一个XElement。并将该元素添加到singleUpload元素中,我更希望您使用XML可序列化标记。为上传、文件等创建类。这很容易管理,而且是自动的,我同意@FaisalHafeez的观点,不需要做复杂的(甚至是简单的)xml是这样的。另一方面,这个问题的质量让我相信你很难使用xml,所以我的实际建议是,在你回来解决这个问题之前,先在xml上玩一玩。谢谢你的想法!你有没有这样的例子?@flindeberg:我需要xml,因为随着时间的推移,这个问题已经解决了文件的“数据库”应该由数千条记录组成。是的,我在xml方面有很多令人眩晕的问题,我找不到一个简单而简洁的教程:-(谢谢你的提示!你能告诉我,“元素”应该指向什么吗?我一直在为此设置空值。我的意思是,为什么元素必须要使用“singleUpload”呢“而不是整个xml文件?我修改了一段代码,有点像这样:var element=xdoc.Elements(“上传”)。(…),它不是它要找的。我应该提供根路径吗?我使用了“singleUpload”示例中的名称,在我的示例中是从xml文件或字符串加载的XElement。您能告诉我在尝试使用示例中的代码时遇到了什么异常情况吗?如果您的xml结构与您在第一篇文章中定义的相同,则所有这些都可以正常工作。我不想将该部分提供给其他方法。这样的方法似乎有什么问题行:xdoc.Elements(“upload”).SingleOrDefault(x=>x.Attribute(“backupid”).Value.Equals(lastUsedID));?谢谢你的提示!你能告诉我,“element”应该指向什么吗?我一直在为此设置null。我的意思是,为什么element必须与“singleUpload”做一些事情而不是整个xml文件?我修改了一段代码,有点像这样:var element=xdoc.Elements(“上传”)。(…),它不是它所要的。我应该提供根路径吗?我使用了“singleUpload”示例中的名称,在我的示例中是从xml文件或字符串加载的XElement。您能告诉我在尝试使用示例中的代码时遇到了什么异常情况吗?如果您的xml结构与您在第一篇文章中定义的相同,则所有这些都可以正常工作。我不想将该部分提供给其他方法。这样的方法似乎有什么问题行:xdoc.Elements(“upload”).SingleOrDefault(x=>x.Attribute(“backupid”).Value.Equals(lastUsedID))?