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を除く)。 zohoそれは実際にはスタイルが非常に似ています。しかし、私はそれを機能させる方法を理解することができませんこれは彼らのウェブサイトからの例です。

<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">testing@testing.com</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

これをもう少しよく理解するのを手伝ってください。私は長い間試みてきました、そしてそれを理解することができません。

4

2 に答える 2

5

ルートノードではなく、ドキュメント自体に属性を追加しようとしています。CreateElementによって作成されたルート要素をキャッシュし、その上でAppendChildを呼び出します。

于 2012-06-06T23:53:33.980 に答える
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">rob@snyder.com</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","rob@snyder.com"));
        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;
    }
}
于 2012-06-07T13:18:00.500 に答える