2012-06-06 2 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

속성을 루트 노드가 아닌 문서 자체에 추가하려고합니다. CreateElement에 의해 생성 된 루트 요소를 캐시하고 그 위에 AppendChild를 호출하십시오. 위해