在运行时创建XML

时间:2014-01-07 21:32:26

标签: c# .net xml

我有一个Web服务,它希望以xml格式输入,并且需要对输入进行编码。我正在研究的环境是.NET 4.5,后面的代码是c#。我必须在SOAP请求中包含编码的xml输入,并将其发送到服务,该服务将输出作为SOAP响应发回。我可以发送SOAP请求并收到响应,但我在发送xml输入时遇到问题。输入涉及来自oracle的数据。例如,我有一个表客户

客户

CustomerName | key       |  Value    |  
______________________________________
AAA          | Grocery   |  10       |
AAA          | Clothing  |  null     |  

在上表中,如果值为null,我需要使用foreign key =“key”引用另一个表,并从另一个表中获取值。

我想构建xml,因为我从查询中获取值。因此,如果我通过传递“AAA”查询客户表,首先我必须阅读杂货店,价值10和xml应该看起来像

<customer>
 <Grocery>10</Grocery>
</customer>

然后我读下一行我看到服装然后服装的值为null,所以我将orderType值(服装)传递给另一个表并获取orderValue并附加到上面的xml以获得最终的xml

<customer>
  <Grocery>10</Grocery
  </Clothing>value from other table</Clothing>
</customer>

就像通过从数据库获取值来构建键值对。现在我的代码使用datareader.getValues读取行的所有值并将其存储在数组中。我试图从数组创建xml,但问题是xml没有被添加但被写入覆盖。

using (OracleConnection conn = new OracleConnection(dbConnectionString))
        {
            conn.Open();
            using (OracleCommand comm = new OracleCommand(query, conn))
            {
                using (OracleDataReader dr = comm.ExecuteReader())
                {
                    while (dr.Read())
                    {
                        Object[] values = new Object[dr.FieldCount];
                        int fieldCount = dr.GetValues(values);


                        XElement xmlInput =
                                      new XElement("Document",
                                          new XElement(values[1].ToString(), values[0].ToString())
                                          );

                            XElement xmlTree = new XElement("Document");

                                foreach (XElement e1 in xmlInput.Elements())
                                {
                                    xmlTree.Add(new XElement("Document",
                                        new XElement(columnName,rowValue)));
                                }
                                xmlInput.Add(xmlTree);
                         }      
                    }
                }

            } 

那么我如何附加xml,因为我一直在阅读数据阅读器中的hey值对?

1 个答案:

答案 0 :(得分:4)

假设您有一组以“allKeyValuePairs”命名的键值对,您可以使用此代码轻松创建发布的XML结构:

XElement xmlDocument = new XElement("Customer");

foreach (KeyValuePair<string, string> singlePair in allKeyValuePairs)
{
    xmlDocument.Add(new XElement(singlePair.Key, singlePair.Value));
}

生成的XML将具有如下结构:

<Customer>
  <Key1>Value1</Key1>
  <Key2>Value2</Key2>
  <Key3>Value3</Key3>
  ....
</Customer>

您创建了更多具有相同名称“Document”的元素,然后通过将它们添加到循环中的相同根元素来保持覆盖它们。