【发布时间】:2017-02-21 15:07:31
【问题描述】:
下面是我从网络服务接收的 XML。我对在 C# 中使用 XML 非常陌生,但我仅在 <data_text> 元素来自某个 <form_id> 时才尝试读取它们。我想遍历所有 XML 以将发送的内容写入 SQL。有没有一种简单的方法来设置它,以便我可以从特定的<field_number> 中找到<data_text> 并将其分配给一个字符串,然后使用该字符串写入 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>
一些C#代码
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.
}
}
【问题讨论】:
-
请说明你需要什么你的问题不清楚你想用C#解析这个xml还是用SQL解析?
-
嗨,你的编辑带走了我的……在你的文字中,所有
<someXmlTag>s 都是不可见的。您必须将它们包装在反引号中。否则这个问题完全不清楚...... -
在编辑问题时请小心不要撤消以前的有益编辑。
-
我想我可能已经修复了更改的覆盖问题。这有帮助吗?
-
您无法使用正则表达式解析 XML。 XML 不是常规语言。
标签: c# sql sql-server xml