2012-06-06 30 views
0
<?xml version=\"1.0\" encoding=\"UTF-8\" ?> 
<response uri=\"/crm/private/xml/Potentials/updateRecords\"> 
    <result> 
     <message>***TEST***Record(s) updated successfully</message> 
     <recorddetail> 
      <FL val=\"Id\">414100000000000000</FL> 
      <FL val=\"Created Time\">2012-03-30 16:54:03</FL> 
      <FL val=\"Modified Time\">2012-04-11 16:53:48</FL> 
      <FL val=\"Created By\"><![CDATA[Bayer]]></FL> 
      <FL val=\"Modified By\"><![CDATA[Bayer]]></FL> 
     </recorddetail> 
    </result> 
</response> 

这是Zoho的一个通用响应,声明我的记录已成功更新(减去测试部分和假ZohoID)。我一直试图让我的C#程序能够制作这种样式的xml文档,因为当我发布到zoho时,它的风格实际上非常相似。但我无法弄清楚如何使它工作这是他们的网站的一个例子。这是一个正常的XML格式?

<Leads> 
<row no="1"> 
<FL val="Lead Source">Web Download</FL> 
<FL val="First Name">contacto 1</FL> 
<FL val="Last Name">apellido</FL> 
<FL val="Email">[email protected]</FL> 
<FL val="Title">Manager</FL> 
<FL val="Phone">1234567890</FL> 
<FL val="Home Phone">0987654321</FL> 
<FL val="Other Phone">1212211212</FL> 
<FL val="Fax">02927272626</FL> 
<FL val="Mobile">292827622</FL> 
</row> 
</Leads> 

我想用C#单元测试来复制它,但它给了我各种错误..我已经失去了一切,我已经尝试了不同的方式,但我会发布什么我目前有和它正在抛出的错误。

[Test] 
    public void TestMethod() 
    { 
     XmlDocument doc = new XmlDocument(); 
     XmlDeclaration declare = doc.CreateXmlDeclaration("1.0", null, null); 
     doc.AppendChild(declare); 
     doc.AppendChild(doc.CreateElement("Potentials")); 
     doc.AppendChild(doc.CreateAttribute("FL", "AccountName", "Robert Snyder")); 

     doc.Save("C:\\test.xml"); 
     //doc.WriteContentTo(XmlWriter.Create("C:\\test.xml")); 
    } 

异常

System.InvalidOperationException:指定的节点无法插入此节点的有效孩子,因为指定的节点是错误的类型。 - c:\ Subversion \ ZohoApi \ ZohoApi \ Tests \ XmlDataTests.cs:22

请帮我理解这个好一点。我一直在努力,只是无法弄清楚。

+0

http://csharp.net-tutorials.com/xml/writing-xml-with-the-xmldocument-class/我认为这正是我需要的总结。我实现它,它的一切都很好..我会将它作为答案发布,除非有人想要 –

回答

0

为了使下面的输出

<Leads> 
    <row no="1"> 
    <FL val="Lead Source">Web Download</FL> 
    <FL val="First Name">Robert</FL> 
    <FL val="Last Name">Snyder</FL> 
    <FL val="Email">[email protected]</FL> 
    <FL val="Title">Programmer</FL> 
    <FL val="Phone">1029384756</FL> 
    <FL val="Home Phone">6574839201</FL> 
    <FL val="Other Phone">1243567890</FL> 
    <FL val="Fax">098776545432</FL> 
    <FL val="Mobile">1243098566</FL> 
    </row> 
</Leads> 

拷贝使用此代码和在单元测试运行它。

[TestFixture] 
public class XmlDataTests 
{ 
    XmlDocument doc = new XmlDocument(); 
    [Test] 
    public void TestMethod() 
    { 
     var rootNode = doc.CreateElement("Leads"); 
     doc.AppendChild(rootNode); 

     var rowNode = doc.CreateElement("row"); 
     var attribute = doc.CreateAttribute("no"); 
     attribute.Value = "1"; 
     rowNode.Attributes.Append(attribute); 

     rowNode.AppendChild(GenerateNode("Lead Source","Web Download")); 
     rowNode.AppendChild(GenerateNode("First Name","Robert")); 
     rowNode.AppendChild(GenerateNode("Last Name","Snyder")); 
     rowNode.AppendChild(GenerateNode("Email","[email protected]")); 
     rowNode.AppendChild(GenerateNode("Title","Programmer")); 
     rowNode.AppendChild(GenerateNode("Phone","1029384756")); 
     rowNode.AppendChild(GenerateNode("Home Phone","6574839201")); 
     rowNode.AppendChild(GenerateNode("Other Phone","1243567890")); 
     rowNode.AppendChild(GenerateNode("Fax","098776545432")); 
     rowNode.AppendChild(GenerateNode("Mobile","1243098566")); 

     rootNode.AppendChild(rowNode); 
     doc.Save("C:\\test.xml"); 
    } 

    private XmlNode GenerateNode(string field, string innerValue) 
    { 
     var xmlNode = doc.CreateElement("FL"); 
     var xmlAttribute = doc.CreateAttribute("val"); 
     xmlAttribute.Value = field; 
     xmlNode.Attributes.Append(xmlAttribute); 
     xmlNode.InnerText = innerValue; 

     return xmlNode; 
    } 
} 
5

您试图将该属性添加到Document本身,而不是根节点。缓存由CreateElement创建的根元素并在其上调用AppendChild。