Home > Mobile >  Google Sheets IMPORTXML - Dealing with null values
Google Sheets IMPORTXML - Dealing with null values

Time:07-28

I am trying to pull data from enter image description here

I need the coverage attribute under weather-conditions, but also need to know if the weather-condition is null. Each "weather-conditions" listed is an hourly value, so a null value is "no chance."

The following xpath gets me the coverage attribute:

//weather-conditions/value[contains(@weather-type,'rain')]/@coverage

I had thought the following xpath would get me the null values as "true" but I'm not having luck:

//weather-conditions/@xsi:nil

Final code I have (not working):

=IMPORTXML("https://forecast.weather.gov/MapClick.php?lat=33.4456&lon=-112.0674&FcstType=digitalDWML", "//weather-conditions/value[contains(@weather-type,'rain')]/@coverage | //weather-conditions/@xsi:nil")

CodePudding user response:

In your situation, how about the following XPath?

Sample xpath:

//*[local-name()='weather-conditions']/*[local-name()='value'][@weather-type='rain']/@coverage | //*[local-name()='weather-conditions']/@*[name()='xsi:nil']

Sample formula:

=IMPORTXML(A1,"//*[local-name()='weather-conditions']/*[local-name()='value'][@weather-type='rain']/@coverage | //*[local-name()='weather-conditions']/@*[name()='xsi:nil']")
  • In this case, the cell "A1" has the URL of https://forecast.weather.gov/MapClick.php?lat=33.4456&lon=-112.0674&FcstType=digitalDWML.

Testing:

When this sample formula is used, the following result is obtained.

enter image description here

Note:

  • For example, if you want to convert TRUE to empty, I thought that a formula of =ARRAYFORMULA(IF(A2:A=TRUE,,A2:A)) might be able to be used.

  • This path is for your provided URL. So, when you change the URL this XPath might not be able to be used. Please be careful about this.

CodePudding user response:

This is the best result I could get:

enter image description here

I used this formula:

=IMPORTXML("https://forecast.weather.gov/MapClick.php?lat=33.4456&lon=-112.0674&FcstType=digitalDWML", "//weather-conditions/value[contains(@weather-type,'rain')]/@coverage  | //data/parameters/weather/weather-conditions")

However, I can't certainly say if this is pulling exactly what you need since I do not know the exact amount of "nulls" we should expect in the results.

Maybe it can be a starting point to achieve your final goal.

CodePudding user response:

Try

={IMPORTXML(A1,"//*[local-name()='weather-conditions']/*[local-name()='value']/@weather-type"),
 IMPORTXML(A1,"//*[local-name()='weather-conditions']/*[local-name()='value']/@coverage")}

this site uses namespace, so you have to use local-name() to retrieve the informations

enter image description here

enter image description here

  • Related