我有一个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值对?
答案 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”的元素,然后通过将它们添加到循环中的相同根元素来保持覆盖它们。