You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Axios调用Zillow API获取XML数据后无法访问指定字段的问题

解决Axios调用Zillow API返回XML无法访问属性的问题

嘿,我之前也踩过这个坑!你现在遇到的问题核心是:Axios默认不会自动解析XML格式的响应——它会把返回的XML数据当成普通的字符串存在res.data里,所以你直接用res.data.request.address这种对象属性访问的方式,自然会得到undefined。

下面是具体的解决步骤:

1. 安装XML解析库

首先你需要一个能把XML字符串转换成JavaScript对象的库,推荐使用xml2js(社区常用,配置灵活),执行安装命令:

npm install xml2js
# 或者用yarn
yarn add xml2js

2. 手动解析XML响应

拿到Axios返回的XML字符串后,用xml2js把它转换成可访问的JS对象。这里给你一个完整的示例:

const axios = require('axios');
const xml2js = require('xml2js');

// 发起Zillow API请求
axios.get('https://www.zillow.com/webservice/GetSearchResults.htm', {
  params: {
    zws_id: '你的Zillow API密钥',
    address: '目标地址',
    citystatezip: '城市/州/邮编'
    // 其他必填参数
  }
})
.then(response => {
  // 解析XML字符串为JS对象,关闭自动数组转换让结构更简洁
  xml2js.parseString(response.data, { explicitArray: false }, (parseErr, parsedData) => {
    if (parseErr) {
      console.error('XML解析失败:', parseErr);
      return;
    }

    // 现在可以正常访问数据了!
    // 注意:路径要根据Zillow XML的实际结构调整,先打印parsedData确认结构
    console.log('请求的地址:', parsedData.searchresults.request.address);
    console.log('请求的城市:', parsedData.searchresults.request.citystatezip);
  });
})
.catch(requestErr => {
  console.error('API请求出错:', requestErr);
});

3. 可选:配置Axios自动解析XML

如果经常调用XML接口,可以给Axios配置transformResponse,让它自动把XML转换成对象,不用每次手动解析:

const axios = require('axios');
const xml2js = require('xml2js');

// 创建XML解析器实例,关闭自动数组转换
const xmlParser = new xml2js.Parser({ explicitArray: false });

// 创建自定义Axios实例
const zillowAxios = axios.create({
  baseURL: 'https://www.zillow.com/webservice/',
  transformResponse: [function(data) {
    // 把XML解析逻辑封装成Promise
    return new Promise((resolve, reject) => {
      xmlParser.parseString(data, (err, result) => {
        if (err) reject(err);
        else resolve(result);
      });
    });
  }]
});

// 现在调用API时,res.data直接是解析后的对象
zillowAxios.get('GetSearchResults.htm', {
  params: {
    zws_id: '你的API密钥',
    // 其他参数
  }
})
.then(res => {
  console.log('请求地址:', res.data.searchresults.request.address);
})
.catch(err => {
  console.error('请求失败:', err);
});

关键提示

  • 先打印parsedData(或者res.data)看看实际的对象结构,因为XML节点可能会被解析成嵌套对象或数组,Zillow的XML根节点是<searchresults>,所以路径大概率是searchresults.request.address,但还是要以实际解析后的结构为准。
  • 如果你的项目用的是ES模块(import语法),只需要把require换成import即可,逻辑完全一致。

内容的提问来源于stack exchange,提问作者born2gamble

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 10:05:24