他们说一个有一只手表的男人知道现在是什么时候,一个有两个人的男人永远不确定。当谈到使用XML的选项时,我似乎有一个装满它们的抽屉。
我正在使用.Net 4。
我用简单的测试写入函数替换了原始代码,并将生成的XML字符串嵌入为注释。
我正在尝试将新的UserVar
节点添加到下面的示例XML中。 XML来自商业计划,我对其设计没有任何意见。
当我尝试添加新条目时,我会在xDoc.Save()
此操作会创建错误构造的文档。
理论上我正在创建一个XElement,其中包含与原始结构相匹配的子项,并尝试将其添加到现有文档中。从其他问题和例子中可以看出其他人正在做的事情。
我的代码在XML下面。该函数创建一个要添加到文档中的XElement。
XML
<?xml version="1.0" encoding="UTF-8"?>
<Application>
<Vars>
<UserVars>
<UserVar>
<Name>"Quantity"</Name>
<Width>4</Width>
<VarValue>"1"</VarValue>
</UserVar>
<UserVar>
<Name>"Printers"</Name>
<Width>255</Width>
</UserVar>
<UserVar>
<Name>"Changed"</Name>
<Width>1</Width>
</UserVar>
<UserVar>
<Name>"Weight"</Name>
<VarValue>"450.1"</VarValue>
</UserVar>
</UserVars>
</Vars>
</Application>
代码
public static void TestWriteData(string xmlDocNm)
{
// Write a test value to an Acme UserVar in the exisiting XML
var xDoc = XDocument.Load(xmlDocNm); //This is your xml path value
XElement xVar = new XElement("UserVar");
// In this company's XML the strings have double quotes around them
xVar.Add((new XElement("Name", "\"Title\"")));
xVar.Add(new XElement("VarValue", "\"Paradise Lost\""));
XElement xElement = new XElement("Application",
new XElement("Vars",
new XElement("UserVars",
xVar)));
// XML Data in xElement - String data copied from the IDE watch
//<Application>
// <Vars>
// <UserVars>
// <UserVar>
// <Name>"Title"</Name>
// <VarValue>"Paradise Lost"</VarValue>
// </UserVar>
// </UserVars>
// </Vars>
//</Application>
xDoc.Add(xElement);
xDoc.Save(xmlDocNm); //Write the XML back to the file
}
答案 0 :(得分:2)
代码正在尝试添加第二个根元素。
更改第xDoc.Add(xElement);
行
到xDoc.Root.Element("Vars").Element("UserVars").Add(xElement);
但在此之前,请删除您创建<Application>
元素的代码。只需创建/输出<UserVar>
元素即可。