转换/访问 XML 的数据 - monotouch (Xamarin) / C# 中的字符串
Posted
技术标签:
【中文标题】转换/访问 XML 的数据 - monotouch (Xamarin) / C# 中的字符串【英文标题】:Converting / Acessing the Data of an XML - String in monotouch (Xamarin) / C# 【发布时间】:2015-01-04 21:05:11 【问题描述】:我的问题: 我目前正在使用 Xamarin.ios 开发一个 IOS 应用程序。到目前为止,我主要使用 JSON Webservices,但现在我必须使用天气 - 返回 XML 字符串的 API。我不知道如何解析它,所以我可以在我的代码中访问它的数据。
解决尝试:我已经阅读了大量 c# 教程,用于将其解析为数组、字典、自定义对象等,但我遇到的问题是它们中的大多数都需要以下库我无法在单点触控中访问。
但必须有一个等价物。
我尝试将它转换为 JSON,所以我可以像往常一样使用它,这里的东西,例如方法
JsonConvert.SerializeXmlNode(...);
在 Monotouch 中不可用。程序集参考在那里,只是缺少一些特定的方法。
任何人都可以提出解决方案或只是为我指明方向吗? 非常感谢您对此有所了解。谢谢。
代码 P.S:这是我在请求网络服务时得到的。
<?xml version="1.0" encoding="UTF-8" ?>
<weather>
<data>
<location>
<pcode>21335</pcode>
</location>
<day date="07.11.2014">
<tmax>10</tmax>
<tmin>2</tmin>
<wrcode>13</wrcode>
<symbol>regenschauer</symbol>
<rr>20</rr>
<windforce_bft>4</windforce_bft>
<windforce_kmh>22</windforce_kmh>
<winddir>SO</winddir>
<sunrise>07:28</sunrise>
<sunset>16:36</sunset>
<sunshine>6</sunshine>
<details>
<temp_m>6</temp_m>
<symbol_m>heiter</symbol_m>
<wrcode_m>4</wrcode_m>
<windforce_bft_m>4</windforce_bft_m>
<windforce_kmh_m>20</windforce_kmh_m>
<winddir_m>S</winddir_m>
<rr_m>5</rr_m>
<temp_a>10</temp_a>
<symbol_a>wolkig</symbol_a>
<wrcode_a>5</wrcode_a>
<windforce_bft_a>4</windforce_bft_a>
<windforce_kmh_a>22</windforce_kmh_a>
<winddir_a>SO</winddir_a>
<rr_a>20</rr_a>
<temp_e>9</temp_e>
<wrcode_e>13</wrcode_e>
<symbol_e>regenschauer</symbol_e>
<windforce_bft_e>4</windforce_bft_e>
<windforce_kmh_e>22</windforce_kmh_e>
<winddir_e>S</winddir_e>
<rr_e>70</rr_e>
<temp_n>6</temp_n>
<wrcode_n>5</wrcode_n>
<symbol_n>wolkig_n</symbol_n>
<windforce_bft_n>4</windforce_bft_n>
<windforce_kmh_n>20</windforce_kmh_n>
<winddir_n>S</winddir_n>
<rr_n>40</rr_n>
</details>
</day>
<day date="08.11.2014">
<tmax>11</tmax>
<tmin>6</tmin>
<wrcode>5</wrcode>
<symbol>wolkig</symbol>
<rr>30</rr>
<windforce_bft>4</windforce_bft>
<windforce_kmh>22</windforce_kmh>
<winddir>SW</winddir>
<sunrise>07:30</sunrise>
<sunset>16:34</sunset>
<sunshine>3</sunshine>
<details>
<temp_m>9</temp_m>
<symbol_m>bedeckt</symbol_m>
<wrcode_m>6</wrcode_m>
<windforce_bft_m>4</windforce_bft_m>
<windforce_kmh_m>28</windforce_kmh_m>
<winddir_m>S</winddir_m>
<rr_m>30</rr_m>
<temp_a>11</temp_a>
<symbol_a>wolkig</symbol_a>
<wrcode_a>5</wrcode_a>
<windforce_bft_a>4</windforce_bft_a>
<windforce_kmh_a>22</windforce_kmh_a>
<winddir_a>SW</winddir_a>
<rr_a>15</rr_a>
<temp_e>10</temp_e>
<wrcode_e>5</wrcode_e>
<symbol_e>wolkig</symbol_e>
<windforce_bft_e>3</windforce_bft_e>
<windforce_kmh_e>19</windforce_kmh_e>
<winddir_e>S</winddir_e>
<rr_e>10</rr_e>
<temp_n>6</temp_n>
<wrcode_n>5</wrcode_n>
<symbol_n>wolkig_n</symbol_n>
<windforce_bft_n>3</windforce_bft_n>
<windforce_kmh_n>19</windforce_kmh_n>
<winddir_n>SO</winddir_n>
<rr_n>10</rr_n>
</details>
</day>
<day date="09.11.2014">
<tmax>11</tmax>
<tmin>6</tmin>
<wrcode>5</wrcode>
<symbol>wolkig</symbol>
<rr>30</rr>
<windforce_bft>4</windforce_bft>
<windforce_kmh>24</windforce_kmh>
<winddir>SO</winddir>
<sunrise>07:32</sunrise>
<sunset>16:32</sunset>
<sunshine>3</sunshine>
<details>
<temp_m>9</temp_m>
<symbol_m>wolkig</symbol_m>
<wrcode_m>5</wrcode_m>
<windforce_bft_m>4</windforce_bft_m>
<windforce_kmh_m>22</windforce_kmh_m>
<winddir_m>SO</winddir_m>
<rr_m>15</rr_m>
<temp_a>11</temp_a>
<symbol_a>bedeckt</symbol_a>
<wrcode_a>6</wrcode_a>
<windforce_bft_a>4</windforce_bft_a>
<windforce_kmh_a>24</windforce_kmh_a>
<winddir_a>SO</winddir_a>
<rr_a>30</rr_a>
<temp_e>10</temp_e>
<wrcode_e>5</wrcode_e>
<symbol_e>wolkig</symbol_e>
<windforce_bft_e>3</windforce_bft_e>
<windforce_kmh_e>19</windforce_kmh_e>
<winddir_e>S</winddir_e>
<rr_e>10</rr_e>
<temp_n>7</temp_n>
<wrcode_n>5</wrcode_n>
<symbol_n>wolkig_n</symbol_n>
<windforce_bft_n>3</windforce_bft_n>
<windforce_kmh_n>17</windforce_kmh_n>
<winddir_n>SW</winddir_n>
<rr_n>20</rr_n>
</details>
</day>
<day date="10.11.2014">
<tmax>10</tmax>
<tmin>7</tmin>
<wrcode>13</wrcode>
<symbol>regenschauer</symbol>
<rr>60</rr>
<windforce_bft>3</windforce_bft>
<windforce_kmh>19</windforce_kmh>
<winddir>S</winddir>
<sunrise>07:34</sunrise>
<sunset>16:31</sunset>
<sunshine>2</sunshine>
</day>
<day date="11.11.2014">
<tmax>11</tmax>
<tmin>7</tmin>
<wrcode>5</wrcode>
<symbol>wolkig</symbol>
<rr>20</rr>
<windforce_bft>4</windforce_bft>
<windforce_kmh>20</windforce_kmh>
<winddir>SO</winddir>
<sunrise>07:35</sunrise>
<sunset>16:29</sunset>
<sunshine>5</sunshine>
</day>
<day date="12.11.2014">
<tmax>11</tmax>
<tmin>8</tmin>
<wrcode>5</wrcode>
<symbol>wolkig</symbol>
<rr>20</rr>
<windforce_bft>4</windforce_bft>
<windforce_kmh>20</windforce_kmh>
<winddir>O</winddir>
<sunrise>07:37</sunrise>
<sunset>16:27</sunset>
<sunshine>4</sunshine>
</day>
<actual_weather>
<date_time>Freitag, 23:00 Uhr</date_time>
<symbol>bedeckt_n</symbol>
<temp>7,4</temp>
<weatherdesc>Stark bewölkt</weatherdesc>
<windforce_bft>3</windforce_bft>
<windforce_kmh>14</windforce_kmh>
<winddir>SSW</winddir>
</actual_weather>
</data>
【问题讨论】:
您可以使用 xamarin 组件 Json.NET 轻松解析 json。这可能会有所帮助appliedcodelog.blogspot.in/2015/06/… 【参考方案1】:Monotouch 默认包含 System.Xml 命名空间:http://developer.xamarin.com/guides/ios/under_the_hood/assemblies/
您可以如下分析xml文档中的数据:
XmlDocument xmlDoc = new XmlDocument();
xmlDoc.LoadXml(dataString);
foreach (XmlElement x in xmlDoc.SelectNodes("weather/data/location/pcode"))
Console.Write(x.InnerXml);
dataString
是一个包含 XML 的 String
。如果要使用 Stream,请改用 xmlDoc.Load(Stream)
。
SelectNodes
的参数是一个 XPath 表达式。我知道人们不喜欢 W3Schools,但他们在这里有一个不错的 Xpath 教程:http://www.w3schools.com/xpath/
【讨论】:
以上是关于转换/访问 XML 的数据 - monotouch (Xamarin) / C# 中的字符串的主要内容,如果未能解决你的问题,请参考以下文章
Monotouch - 转换到 xCode 4 - XIB 不工作
使用 Monotouch 时如何将 CGColor 转换为 NSObject?
从 MonoTouch 访问 iCloud NSUbiquitousKeyValueStoreDidChangeExternallyNotification 详细信息