C# 在C中读取多个XML元素并写入SQL#
下面是我从web服务接收的XML。我对在C语言中使用XML非常陌生,但我试图仅当C# 在C中读取多个XML元素并写入SQL#,c#,sql,sql-server,xml,C#,Sql,Sql Server,Xml,下面是我从web服务接收的XML。我对在C语言中使用XML非常陌生,但我试图仅当元素来自某个时才读取它们。我希望遍历所有XML,将发送的内容写入SQL。是否有一种简单的方法来设置它,以便我可以从特定的中找到并将其分配给字符串,然后使用该字符串写入SQL?一旦我可以将所有内容都转换成字符串,我就可以轻松地编写SQL,但我无法将XML转换成字符串。我也愿意接受其他选择。在底部,我有我目前的C# <?xml version="1.0" encoding="ISO-8859-1"?> <
元素来自某个
时才读取它们。我希望遍历所有XML,将发送的内容写入SQL。是否有一种简单的方法来设置它,以便我可以从特定的
中找到
并将其分配给字符串,然后使用该字符串写入SQL?一旦我可以将所有内容都转换成字符串,我就可以轻松地编写SQL,但我无法将XML转换成字符串。我也愿意接受其他选择。在底部,我有我目前的C#
<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE pnet_message_history_packet_response PUBLIC>
<pnet_message_history_packet_response>
<packet_id>2</packet_id>
<imessage>
<vehicle_number>Test1</vehicle_number>
<created_datetime>02/20/2017 19:33:28</created_datetime>
<received_datetime>02/20/2017 19:33:53</received_datetime>
<recipient>
<recip_uid>1234</recip_uid>
<recip_name>TestRecip</recip_name>
</recipient>
<msn>1233</msn>
<base_msn>1234</base_msn>
<message_type>form</message_type>
<formdata>
<form_id>55555</form_id>
<im_field>
<field_number>5</field_number>
<empty_at_start>no</empty_at_start>
<driver_modified>no</driver_modified>
<data>
<data_text>Test5</data_text>
</data>
</im_field>
<im_field>
<field_number>6</field_number>
<empty_at_start>yes</empty_at_start>
<driver_modified>yes</driver_modified>
<data>
<data_text>Test6</data_text>
</data>
</im_field>
<im_field>
<field_number>7</field_number>
<empty_at_start>yes</empty_at_start>
<driver_modified>yes</driver_modified>
<data>
<data_text>Test7</data_text>
</data>
</im_field>
<im_field>
<field_number>8</field_number>
<empty_at_start>yes</empty_at_start>
<driver_modified>yes</driver_modified>
<data>
<data_date-time>09/09/09 09:09:00</data_date-time>
</data>
</im_field>
<im_field>
<field_number>9</field_number>
<empty_at_start>yes</empty_at_start>
<driver_modified>yes</driver_modified>
<data>
<data_date-time>09/09/09 09:09:00</data_date-time>
</data>
</im_field>
<im_field>
<field_number>10</field_number>
<empty_at_start>no</empty_at_start>
<driver_modified>no</driver_modified>
<data>
<data_text>Test10</data_text>
</data>
</im_field>
</formdata>
</imessage>
<imessage>
<vehicle_number>Test1</vehicle_number>
<created_datetime>02/20/2017 19:34:04</created_datetime>
<received_datetime>02/20/2017 19:34:19</received_datetime>
<recipient>
<recip_uid>1234</recip_uid>
<recip_name>TestRecip</recip_name>
</recipient>
<msn>1235</msn>
<base_msn>1236</base_msn>
<message_type>form</message_type>
<formdata>
<form_id>55555</form_id>
<im_field>
<field_number>5</field_number>
<empty_at_start>no</empty_at_start>
<driver_modified>no</driver_modified>
<data>
<data_text>Test52</data_text>
</data>
</im_field>
<im_field>
<field_number>6</field_number>
<empty_at_start>yes</empty_at_start>
<driver_modified>yes</driver_modified>
<data>
<data_text>Test62</data_text>
</data>
</im_field>
<im_field>
<field_number>7</field_number>
<empty_at_start>yes</empty_at_start>
<driver_modified>yes</driver_modified>
<data>
<data_text>Test72</data_text>
</data>
</im_field>
<im_field>
<field_number>8</field_number>
<empty_at_start>yes</empty_at_start>
<driver_modified>yes</driver_modified>
<data>
<data_date-time>09/08/09 09:08:00</data_date-time>
</data>
</im_field>
<im_field>
<field_number>9</field_number>
<empty_at_start>yes</empty_at_start>
<driver_modified>yes</driver_modified>
<data>
<data_date-time>09/08/09 08:09:00</data_date-time>
</data>
</im_field>
<im_field>
<field_number>10</field_number>
<empty_at_start>no</empty_at_start>
<driver_modified>no</driver_modified>
<data>
<data_text>Test102</data_text>
</data>
</im_field>
</formdata>
</imessage>
</pnet_message_history_packet_response>
2.
测试1
02/20/2017 19:33:28
02/20/2017 19:33:53
1234
TestRecip
1233
1234
形式
55555
5.
不
不
测试5
6.
对
对
测试6
7.
对
对
测试7
8.
对
对
09/09/09 09:09:00
9
对
对
09/09/09 09:09:00
10
不
不
测试10
测试1
02/20/2017 19:34:04
02/20/2017 19:34:19
1234
TestRecip
1235
1236
形式
55555
5.
不
不
测试52
6.
对
对
测试62
7.
对
对
测试72
8.
对
对
09/08/09 09:08:00
9
对
对
09/08/09 08:09:00
10
不
不
测试102
一些C#代码
受保护的void GetMessages()
{
XmlDocument xmldoc=新的XmlDocument();
xmldoc.PreserveWhitespace=false;
正则表达式正则表达式=新正则表达式(@“^\s+$[\r\n]*”;
String cleanedXml=regex.Replace(postXMLData(URL,前缀,“POST”),“>静态void Main(字符串[]args)
{
var-xml=
@"
2.
测试1
02/20/2017 19:33:28
02/20/2017 19:33:53
1234
TestRecip
1233
1234
形式
55555
5.
不
不
测试5
6.
对
对
测试6
7.
对
对
测试7
8.
对
对
09/09/09 09:09:00
9
对
对
09/09/09 09:09:00
10
不
不
测试10
测试1
02/20/2017 19:34:04
02/20/2017 19:34:19
1234
TestRecip
1235
1236
形式
55555
5.
不
不
测试52
6.
对
对
protected void GetMessages()
{
XmlDocument xmldoc = new XmlDocument();
xmldoc.PreserveWhitespace = false;
Regex regex = new Regex(@"^\s+$[\r\n]*");
String cleanedXml = regex.Replace(postXMLData(URL, prefix, "POST"), "><").TrimStart();
xmldoc.LoadXml(cleanedXml);
XmlNodeList messageList = xmldoc.GetElementsByTagName("imessage");
foreach (XmlNode node in messageList)
{
XmlElement messageElement = (XmlElement)node;
String Arrival;
Arrival = messageElement.GetElementsByTagName("data_text")[0].InnerText;
testTxtBx.Text += Arrival; //I am just trying to write to a Textbox now to see the results.
}
}
static void Main(string[] args)
{
var xml =
@"<pnet_message_history_packet_response>
<packet_id>2</packet_id>
<imessage>
<vehicle_number>Test1</vehicle_number>
<created_datetime>02/20/2017 19:33:28</created_datetime>
<received_datetime>02/20/2017 19:33:53</received_datetime>
<recipient>
<recip_uid>1234</recip_uid>
<recip_name>TestRecip</recip_name>
</recipient>
<msn>1233</msn>
<base_msn>1234</base_msn>
<message_type>form</message_type>
<formdata>
<form_id>55555</form_id>
<im_field>
<field_number>5</field_number>
<empty_at_start>no</empty_at_start>
<driver_modified>no</driver_modified>
<data>
<data_text>Test5</data_text>
</data>
</im_field>
<im_field>
<field_number>6</field_number>
<empty_at_start>yes</empty_at_start>
<driver_modified>yes</driver_modified>
<data>
<data_text>Test6</data_text>
</data>
</im_field>
<im_field>
<field_number>7</field_number>
<empty_at_start>yes</empty_at_start>
<driver_modified>yes</driver_modified>
<data>
<data_text>Test7</data_text>
</data>
</im_field>
<im_field>
<field_number>8</field_number>
<empty_at_start>yes</empty_at_start>
<driver_modified>yes</driver_modified>
<data>
<data_date-time>09/09/09 09:09:00</data_date-time>
</data>
</im_field>
<im_field>
<field_number>9</field_number>
<empty_at_start>yes</empty_at_start>
<driver_modified>yes</driver_modified>
<data>
<data_date-time>09/09/09 09:09:00</data_date-time>
</data>
</im_field>
<im_field>
<field_number>10</field_number>
<empty_at_start>no</empty_at_start>
<driver_modified>no</driver_modified>
<data>
<data_text>Test10</data_text>
</data>
</im_field>
</formdata>
</imessage>
<imessage>
<vehicle_number>Test1</vehicle_number>
<created_datetime>02/20/2017 19:34:04</created_datetime>
<received_datetime>02/20/2017 19:34:19</received_datetime>
<recipient>
<recip_uid>1234</recip_uid>
<recip_name>TestRecip</recip_name>
</recipient>
<msn>1235</msn>
<base_msn>1236</base_msn>
<message_type>form</message_type>
<formdata>
<form_id>55555</form_id>
<im_field>
<field_number>5</field_number>
<empty_at_start>no</empty_at_start>
<driver_modified>no</driver_modified>
<data>
<data_text>Test52</data_text>
</data>
</im_field>
<im_field>
<field_number>6</field_number>
<empty_at_start>yes</empty_at_start>
<driver_modified>yes</driver_modified>
<data>
<data_text>Test62</data_text>
</data>
</im_field>
<im_field>
<field_number>7</field_number>
<empty_at_start>yes</empty_at_start>
<driver_modified>yes</driver_modified>
<data>
<data_text>Test72</data_text>
</data>
</im_field>
<im_field>
<field_number>8</field_number>
<empty_at_start>yes</empty_at_start>
<driver_modified>yes</driver_modified>
<data>
<data_date-time>09/08/09 09:08:00</data_date-time>
</data>
</im_field>
<im_field>
<field_number>9</field_number>
<empty_at_start>yes</empty_at_start>
<driver_modified>yes</driver_modified>
<data>
<data_date-time>09/08/09 08:09:00</data_date-time>
</data>
</im_field>
<im_field>
<field_number>10</field_number>
<empty_at_start>no</empty_at_start>
<driver_modified>no</driver_modified>
<data>
<data_text>Test102</data_text>
</data>
</im_field>
</formdata>
</imessage>
</pnet_message_history_packet_response>";
XmlDocument xmldoc = new XmlDocument();
xmldoc.PreserveWhitespace = false;
Regex regex = new Regex(@"^\s+$[\r\n]*");
//String cleanedXml = regex.Replace(xml(URL, prefix, "POST"), "><").TrimStart();
xmldoc.LoadXml(xml);
// var list = from ws in doc.Descendants("formdata").ToList() ;
TextReader tr = new StringReader(xml);
XDocument doc = XDocument.Load(tr);
var list = (from root in doc.Descendants("imessage")
select new
{
p = root.Element("vehicle_number") != null ? root.Element("vehicle_number").Value : string.Empty ,
formdata= (from fdata in root.Descendants("formdata")
select new { x= fdata.Element("form_id") != null ? fdata.Element("form_id").Value : string.Empty , }
).ToList()
}
).ToList();
Console.ReadLine();
}
declare @xml xml
select @xml =
'
<pnet_message_history_packet_response>
<packet_id>2</packet_id>
<imessage>
<vehicle_number>Test1</vehicle_number>
<created_datetime>02/20/2017 19:33:28</created_datetime>
<received_datetime>02/20/2017 19:33:53</received_datetime>
<recipient>
<recip_uid>1234</recip_uid>
<recip_name>TestRecip</recip_name>
</recipient>
<msn>1233</msn>
<base_msn>1234</base_msn>
<message_type>form</message_type>
<formdata>
<form_id>55555</form_id>
<im_field>
<field_number>5</field_number>
<empty_at_start>no</empty_at_start>
<driver_modified>no</driver_modified>
<data>
<data_text>Test5</data_text>
</data>
</im_field>
<im_field>
<field_number>6</field_number>
<empty_at_start>yes</empty_at_start>
<driver_modified>yes</driver_modified>
<data>
<data_text>Test6</data_text>
</data>
</im_field>
<im_field>
<field_number>7</field_number>
<empty_at_start>yes</empty_at_start>
<driver_modified>yes</driver_modified>
<data>
<data_text>Test7</data_text>
</data>
</im_field>
<im_field>
<field_number>8</field_number>
<empty_at_start>yes</empty_at_start>
<driver_modified>yes</driver_modified>
<data>
<data_date-time>09/09/09 09:09:00</data_date-time>
</data>
</im_field>
<im_field>
<field_number>9</field_number>
<empty_at_start>yes</empty_at_start>
<driver_modified>yes</driver_modified>
<data>
<data_date-time>09/09/09 09:09:00</data_date-time>
</data>
</im_field>
<im_field>
<field_number>10</field_number>
<empty_at_start>no</empty_at_start>
<driver_modified>no</driver_modified>
<data>
<data_text>Test10</data_text>
</data>
</im_field>
</formdata>
</imessage>
<imessage>
<vehicle_number>Test1</vehicle_number>
<created_datetime>02/20/2017 19:34:04</created_datetime>
<received_datetime>02/20/2017 19:34:19</received_datetime>
<recipient>
<recip_uid>1234</recip_uid>
<recip_name>TestRecip</recip_name>
</recipient>
<msn>1235</msn>
<base_msn>1236</base_msn>
<message_type>form</message_type>
<formdata>
<form_id>55555</form_id>
<im_field>
<field_number>5</field_number>
<empty_at_start>no</empty_at_start>
<driver_modified>no</driver_modified>
<data>
<data_text>Test52</data_text>
</data>
</im_field>
<im_field>
<field_number>6</field_number>
<empty_at_start>yes</empty_at_start>
<driver_modified>yes</driver_modified>
<data>
<data_text>Test62</data_text>
</data>
</im_field>
<im_field>
<field_number>7</field_number>
<empty_at_start>yes</empty_at_start>
<driver_modified>yes</driver_modified>
<data>
<data_text>Test72</data_text>
</data>
</im_field>
<im_field>
<field_number>8</field_number>
<empty_at_start>yes</empty_at_start>
<driver_modified>yes</driver_modified>
<data>
<data_date-time>09/08/09 09:08:00</data_date-time>
</data>
</im_field>
<im_field>
<field_number>9</field_number>
<empty_at_start>yes</empty_at_start>
<driver_modified>yes</driver_modified>
<data>
<data_date-time>09/08/09 08:09:00</data_date-time>
</data>
</im_field>
<im_field>
<field_number>10</field_number>
<empty_at_start>no</empty_at_start>
<driver_modified>no</driver_modified>
<data>
<data_text>Test102</data_text>
</data>
</im_field>
</formdata>
</imessage>
</pnet_message_history_packet_response>
'
declare @holder table ( FormId int, DataText varchar(64) )
insert into @holder (FormId, DataText)
SELECT
T.MyEntity.value('../../form_id[1]', 'INT') AS ProgramId
,T.MyEntity.value('data_text[1]', 'VARCHAR(256)') AS SharedAccessKeyName
FROM @xml.nodes('pnet_message_history_packet_response/imessage/formdata/im_field/data') AS T(MyEntity);
select * from @holder