繁体   English   中英

无法找到正确的 XPath 或 XSLT 以正确解析此 XML 提要

[英]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元素下,它有一个字符串值为dailydt1597946400

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM