FILTERXML函数是Excel中用于从XML数据中提取特定信息的函数。它使用XPath表达式来查询XML结构并返回匹配的数据。
一、函数语法
=FILTERXML(xml, xpath)
- xml:包含有效XML格式的文本字符串或单元格引用
- xpath:标准的XPath表达式,用于指定要提取的数据位置
二、基本使用示例
示例1:提取简单XML数据
假设A1单元格中有以下XML内容:
<data>
<name>张三</name>
<age>28</age>
<department>销售部</department>
</data>
| 公式 | 结果 | 说明 |
|---|---|---|
| =FILTERXML(A1, "//name") | 张三 | 提取name节点的值 |
| =FILTERXML(A1, "//age") | 28 | 提取age节点的值 |
| =FILTERXML(A1, "//department") | 销售部 | 提取department节点的值 |
示例2:提取多个相同节点
假设A2单元格中有以下XML内容:
<employees>
<employee>李明</employee>
<employee>王芳</employee>
<employee>刘伟</employee>
</employees>
| 公式 | 结果 | 说明 |
|---|---|---|
| =FILTERXML(A2, "//employee[1]") | 李明 | 提取第一个employee节点 |
| =FILTERXML(A2, "//employee[2]") | 王芳 | 提取第二个employee节点 |
| =FILTERXML(A2, "//employee[3]") | 刘伟 | 提取第三个employee节点 |
三、XPath表达式常用语法
| XPath表达式 | 说明 | 示例 |
|---|---|---|
| //node | 选择所有名为node的节点 | //name |
| /root/node | 选择root下的node子节点 | /data/name |
| node[@attribute] | 选择带有attribute属性的node节点 | //item[@id] |
| node[@attribute='value'] | 选择attribute属性值为value的node节点 | //person[@id='101'] |
| node[position()] | 按位置选择节点 | //employee[1] |
| * | 选择所有节点 | //data/* |
四、实际应用案例
案例1:从Web API返回的XML中提取数据
使用WEBSERVICE函数获取XML数据,再用FILTERXML解析:
=FILTERXML(
WEBSERVICE("http://api.example.com/data.xml"),
"//temperature"
)
案例2:解析嵌套XML结构
假设有以下XML数据:
<company>
<department name="技术部">
<employee>陈工</employee>
<employee>李工</employee>
</department>
<department name="市场部">
<employee>张经理</employee>
</department>
</company>
| 公式 | 结果 | 说明 |
|---|---|---|
| =FILTERXML(A3, "//department[@name='技术部']/employee[1]") | 陈工 | 提取技术部第一个员工 |
| =FILTERXML(A3, "//department[2]/employee") | 张经理 | 提取第二个部门的员工 |
| =FILTERXML(A3, "//department/@name") | 技术部 | 提取第一个部门的名称属性 |
五、注意事项
- XML必须是格式良好的(标签闭合、结构正确)
- 如果XPath没有匹配到任何节点,函数返回#VALUE!错误
- 使用WEBSERVICE函数获取网络XML数据时,需要Excel支持Web查询
- FILTERXML是Excel 2013及以上版本才支持的函数
六、常见错误处理
| 错误类型 | 可能原因 | 解决方法 |
|---|---|---|
| #VALUE! | XML格式不正确或XPath无匹配 | 检查XML格式和XPath表达式 |
| #NAME? | Excel版本不支持FILTERXML | 升级到Excel 2013或更高版本 |
| 空结果 | XPath路径错误 | 使用更简单的XPath测试 |
七、综合练习
尝试解析以下XML数据:
<books>
<book category="小说">
<title>活着</title>
<author>余华</author>
<price>39.00</price>
</book>
<book category="科技">
<title>Python编程</title>
<author>John Doe</author>
<price>89.00</price>
</book>
</books>
练习公式:
- 提取第一本书的标题:
=FILTERXML(A4, "//book[1]/title") - 提取科技类书籍的作者:
=FILTERXML(A4, "//book[@category='科技']/author") - 提取所有书籍价格:
=FILTERXML(A4, "//book[2]/price")(第二本)
❤️收藏 👍点赞
用户评论
发表评论