[英]Having trouble finding the correct XPath or XSLT to properly parse this XML feed
我有一个 XML 天气源,我想以两种不同的方式在我们的数字标牌上使用。 第一个是当前温度和条件。 第二个是几天的预测。 使用 openweathermap.org 上的 One Call API,我可以获得提要,但我们的数字签名软件无法解析提要,因为它是嵌套的。
例如,使用 XPATH //current
会给出其下的所有字段,但<weather>
的所有子字段都连接成一个字符串,而不是单独的属性。 //daily
部分中的<temp>
字段也是如此。 是否有我可以使用的 XPath 或样式表可以为我提供当前或每日下的所有字段名称,并为我提供天气和临时字段的正确属性,例如<temp@day>
?
这是完整的 XML 提要:
<IntegrationResponse xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<ReturnCode>OK</ReturnCode>
<ID>FWI_SUCCESS</ID>
<Description>Success</Description>
<TimeStamp>2020-08-20T14:21:48.9135812-05:00</TimeStamp>
<IsCachedData>false</IsCachedData>
<HttpContentType>application/octet-stream</HttpContentType>
<ResponseFormat>XML</ResponseFormat>
<root>
<lat>40.81</lat>
<lon>-96.7</lon>
<timezone>America/Chicago</timezone>
<timezone_offset>-18000</timezone_offset>
<current>
<dt>1597951309</dt>
<sunrise>1597923755</sunrise>
<sunset>1597972672</sunset>
<temp>83.66</temp>
<feels_like>79.27</feels_like>
<pressure>1013</pressure>
<humidity>51</humidity>
<dew_point>63.63</dew_point>
<uvi>8.26</uvi>
<clouds>1</clouds>
<visibility>10000</visibility>
<wind_speed>16.11</wind_speed>
<wind_deg>170</wind_deg>
<weather>
<id>800</id>
<main>Clear</main>
<description>clear sky</description>
<icon>01d</icon>
</weather>
</current>
<daily>
<dt>1597946400</dt>
<sunrise>1597923755</sunrise>
<sunset>1597972672</sunset>
<temp>
<day>83.66</day>
<min>70.09</min>
<max>84.09</max>
<night>70.09</night>
<eve>80.74</eve>
<morn>83.66</morn>
</temp>
<feels_like>
<day>81.82</day>
<night>67.5</night>
<eve>81.64</eve>
<morn>81.82</morn>
</feels_like>
<pressure>1013</pressure>
<humidity>51</humidity>
<dew_point>63.63</dew_point>
<wind_speed>11.56</wind_speed>
<wind_deg>196</wind_deg>
<weather>
<id>500</id>
<main>Rain</main>
<description>light rain</description>
<icon>10d</icon>
</weather>
<clouds>1</clouds>
<pop>0.32</pop>
<rain>0.16</rain>
<uvi>8.26</uvi>
</daily>
<daily>
<dt>1598032800</dt>
<sunrise>1598010215</sunrise>
<sunset>1598058983</sunset>
<temp>
<day>80.87</day>
<min>62.96</min>
<max>84.36</max>
<night>66.99</night>
<eve>79.34</eve>
<morn>62.96</morn>
</temp>
<feels_like>
<day>78.62</day>
<night>65.59</night>
<eve>80.02</eve>
<morn>62.29</morn>
</feels_like>
<pressure>1010</pressure>
<humidity>56</humidity>
<dew_point>63.75</dew_point>
<wind_speed>12.37</wind_speed>
<wind_deg>190</wind_deg>
<weather>
<id>500</id>
<main>Rain</main>
<description>light rain</description>
<icon>10d</icon>
</weather>
<clouds>90</clouds>
<pop>0.7</pop>
<rain>0.46</rain>
<uvi>7.93</uvi>
</daily>
<daily>
<dt>1598119200</dt>
<sunrise>1598096675</sunrise>
<sunset>1598145294</sunset>
<temp>
<day>83.32</day>
<min>63.23</min>
<max>88.03</max>
<night>70.5</night>
<eve>84.34</eve>
<morn>63.23</morn>
</temp>
<feels_like>
<day>83.57</day>
<night>71.91</night>
<eve>87.13</eve>
<morn>61.66</morn>
</feels_like>
<pressure>1010</pressure>
<humidity>60</humidity>
<dew_point>68.02</dew_point>
<wind_speed>11.34</wind_speed>
<wind_deg>201</wind_deg>
<weather>
<id>501</id>
<main>Rain</main>
<description>moderate rain</description>
<icon>10d</icon>
</weather>
<clouds>29</clouds>
<pop>0.83</pop>
<rain>3.12</rain>
<uvi>7.67</uvi>
</daily>
<daily>
<dt>1598205600</dt>
<sunrise>1598183134</sunrise>
<sunset>1598231603</sunset>
<temp>
<day>86.11</day>
<min>65.91</min>
<max>90.77</max>
<night>71.53</night>
<eve>86.83</eve>
<morn>65.91</morn>
</temp>
<feels_like>
<day>89.31</day>
<night>72.54</night>
<eve>92.08</eve>
<morn>66.88</morn>
</feels_like>
<pressure>1012</pressure>
<humidity>52</humidity>
<dew_point>66.97</dew_point>
<wind_speed>4.81</wind_speed>
<wind_deg>203</wind_deg>
<weather>
<id>800</id>
<main>Clear</main>
<description>clear sky</description>
<icon>01d</icon>
</weather>
<clouds>0</clouds>
<pop>0.2</pop>
<uvi>7.64</uvi>
</daily>
<daily>
<dt>1598292000</dt>
<sunrise>1598269594</sunrise>
<sunset>1598317912</sunset>
<temp>
<day>90.05</day>
<min>68.13</min>
<max>93.61</max>
<night>76.59</night>
<eve>87.98</eve>
<morn>68.13</morn>
</temp>
<feels_like>
<day>90.18</day>
<night>71.94</night>
<eve>90.36</eve>
<morn>67.39</morn>
</feels_like>
<pressure>1012</pressure>
<humidity>49</humidity>
<dew_point>68.7</dew_point>
<wind_speed>11.81</wind_speed>
<wind_deg>194</wind_deg>
<weather>
<id>800</id>
<main>Clear</main>
<description>clear sky</description>
<icon>01d</icon>
</weather>
<clouds>0</clouds>
<pop>0</pop>
<uvi>8.39</uvi>
</daily>
<daily>
<dt>1598378400</dt>
<sunrise>1598356053</sunrise>
<sunset>1598404220</sunset>
<temp>
<day>91.65</day>
<min>70.93</min>
<max>94.1</max>
<night>73.99</night>
<eve>86.95</eve>
<morn>70.93</morn>
</temp>
<feels_like>
<day>89.22</day>
<night>71.37</night>
<eve>88.34</eve>
<morn>67.84</morn>
</feels_like>
<pressure>1011</pressure>
<humidity>43</humidity>
<dew_point>66.63</dew_point>
<wind_speed>14.45</wind_speed>
<wind_deg>201</wind_deg>
<weather>
<id>800</id>
<main>Clear</main>
<description>clear sky</description>
<icon>01d</icon>
</weather>
<clouds>0</clouds>
<pop>0</pop>
<uvi>8.35</uvi>
</daily>
<daily>
<dt>1598464800</dt>
<sunrise>1598442512</sunrise>
<sunset>1598490527</sunset>
<temp>
<day>90.81</day>
<min>69.57</min>
<max>94.19</max>
<night>76.82</night>
<eve>87.51</eve>
<morn>69.57</morn>
</temp>
<feels_like>
<day>88.16</day>
<night>75.29</night>
<eve>87.67</eve>
<morn>65.97</morn>
</feels_like>
<pressure>1008</pressure>
<humidity>42</humidity>
<dew_point>64.85</dew_point>
<wind_speed>13.71</wind_speed>
<wind_deg>200</wind_deg>
<weather>
<id>800</id>
<main>Clear</main>
<description>clear sky</description>
<icon>01d</icon>
</weather>
<clouds>0</clouds>
<pop>0</pop>
<uvi>8.36</uvi>
</daily>
<daily>
<dt>1598551200</dt>
<sunrise>1598528971</sunrise>
<sunset>1598576833</sunset>
<temp>
<day>92.28</day>
<min>68.72</min>
<max>94.44</max>
<night>68.72</night>
<eve>87.24</eve>
<morn>74.32</morn>
</temp>
<feels_like>
<day>91.83</day>
<night>66.36</night>
<eve>85.6</eve>
<morn>71.8</morn>
</feels_like>
<pressure>1007</pressure>
<humidity>41</humidity>
<dew_point>65.64</dew_point>
<wind_speed>10.29</wind_speed>
<wind_deg>252</wind_deg>
<weather>
<id>802</id>
<main>Clouds</main>
<description>scattered clouds</description>
<icon>03d</icon>
</weather>
<clouds>38</clouds>
<pop>0.19</pop>
<uvi>8.1</uvi>
</daily>
</root>
</IntegrationResponse>
我们的标牌软件的工作方式是,我需要一个提要中的所有必要字段——我不能将多个请求混合到一个提要中。 我只是需要以某种方式使饲料变平。 因此,对于当前天气,我需要一个解决方案来提供所有这些,并将天气下的所有属性作为它们自己的字段:
<current>
<dt>1597951309</dt>
<sunrise>1597923755</sunrise>
<sunset>1597972672</sunset>
<temp>83.66</temp>
<feels_like>79.27</feels_like>
<pressure>1013</pressure>
<humidity>51</humidity>
<dew_point>63.63</dew_point>
<uvi>8.26</uvi>
<clouds>1</clouds>
<visibility>10000</visibility>
<wind_speed>16.11</wind_speed>
<wind_deg>170</wind_deg>
<weather.id>800</weather.id>
<weather.main>Clear</weather.main>
<weather.description>clear sky</weather.description>
<weather.icon>01d</weather.icon>
</current>
另外,关于我们的标牌软件的附加上下文:在布局编辑器中,您不会直接引用提要中的单个行/项目。 如果您获得正确的 XPath 或 XSLT 并设计一行,则您可以使用能够引入的字段名称设计一行。 然后,它使用来自提要和可用空间的可用信息填充列表。
您只需要在 XPath 中采取多个步骤...
而不是//current
,使用
//current/temp
或者
/IntegrationResponse/root/current/temp
到 select 单独的temp
元素。
同样,而不是//daily
,使用
/IntegrationResponse/root/daily[dt="1597946400"]/temp/day
到 select 的day
元素,在 day 元素下的temp
元素下,它有一个字符串值为daily
的dt
子1597946400
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.