如何在 FILTERXML 中连接 XML 子级

Var*_*tus 2 xml excel

我可能有这样的 XML 字符串

\n\n
<data>\n    <a> \xe2\x80\x9cone\xe2\x80\x9d </a>\n    <a> \xe2\x80\x9cthree\xe2\x80\x9d </a>\n    <a> \xe2\x80\x9ctwo\xe2\x80\x9d </a>\n</data>\n
Run Code Online (Sandbox Code Playgroud)\n\n

在 Excel 单元格中,它看起来像这样。

\n\n
[A2] = "<data><a>one</a><a>three</a><a>two</a></data>"\n
Run Code Online (Sandbox Code Playgroud)\n\n

我想使用 FILTERXML() 函数按顺序提取数字“二”和“三”。我知道如何用这个公式做到这一点。

\n\n
=FILTERXML(A2,"/data/a[3]") & FILTERXML(A2","/data/a[2]"))\n
Run Code Online (Sandbox Code Playgroud)\n\n

但是,必须有一种方法可以在单个函数调用中连接两个元素,例如

\n\n
=FILTERXML(A2,"/data/a[3]" & "/data/a[2]")\n
Run Code Online (Sandbox Code Playgroud)\n\n

事实上,我想它应该比这更简单。谁能告诉我该怎么做?

\n

Ron*_*eld 5

如果你想将这两个作为数组返回,我会使用:

\n\n
=INDEX(FILTERXML(A2,"//a"),{3,2})\n
Run Code Online (Sandbox Code Playgroud)\n\n

或者

\n\n
=INDEX(FILTERXML(A2,"//a"),{3;2})\n
Run Code Online (Sandbox Code Playgroud)\n\n

如果您想将它们作为连接字符串返回,您可以使用:

\n\n
=TEXTJOIN(",",TRUE,INDEX(FILTERXML(A2,"//a"),{3;2}))\n
Run Code Online (Sandbox Code Playgroud)\n\n

以下是根据您的评论/问题的一些用法示例

\n\n

在此输入图像描述

\n\n

我没有提供 SUM返回零的示例,因为您的数据不是数字。

\n\n

请注意,如果您使用的是较旧版本的 Excel,没有动态数组,您可能(或可能不必)必须使用ctrl+shift+enter来确认公式,和/或对于简单=INDEX(\xe2\x80\xa6公式,将其作为数组输入到多个单元格中。

\n\n
C2:  =INDEX(FILTERXML(A2,"//a"),{3,2})\nC4:  =INDEX(FILTERXML(A2,"//a"),{3;2})\n\nC7:  =COUNTA(INDEX(FILTERXML(A2,"//a"),{3,2}))\nC8:  =MATCH("\xe2\x80\x9cthree\xe2\x80\x9d",INDEX(FILTERXML(A2,"//a"),{3,2}),0)\n
Run Code Online (Sandbox Code Playgroud)\n