使用 FILTERXML 之后返回子字符串

Sco*_*ner 5 excel excel-formula

在现已删除的问题中,OP 要求返回1.30.4来自1^1.3%2^0.4

我立即想到了 FILTERXML。

我能够做到这一点:

=MID(FILTERXML("<a><b>"&SUBSTITUTE(A1,"%","</b><b>")&"</b></a>","//b"),FIND("^",FILTERXML("<a><b>"&SUBSTITUTE(A1,"%","</b><b>")&"</b></a>","//b"))+1,99) 
Run Code Online (Sandbox Code Playgroud)

但这似乎太重复了。

substring-after在 XPATH 1.0 中找到了它,但无法让它执行我想要的操作。我首先尝试:

=FILTERXML("<a><b>"&SUBSTITUTE(A1,"%","</b><b>")&"</b></a>","//b[substring-after(., '^')]")
Run Code Online (Sandbox Code Playgroud)

但这返回了完整的字符串和:

=FILTERXML("<a><b>"&SUBSTITUTE(A1,"%","</b><b>")&"</b></a>","substring-after(//b, '^')")
Run Code Online (Sandbox Code Playgroud)

刚刚返回了一个错误。

有没有办法只使用 FILTERXML 返回所需的数字?

Jvd*_*vdV 2

不幸的是,XPATH在 Excel 中似乎无法返回修改后的值,而是用于FILTERXML过滤和返回那些感兴趣的节点。重新设计这些节点需要在功能之外完成。

如果您对单次FILTERXML使用感兴趣,我建议使用两次SUBSTITUTE

=FILTERXML("<a><b>"&SUBSTITUTE(SUBSTITUTE(A1,"^","^%"),"%","</b><b>")&"</b></a>","//b[contains(preceding::*[1],'^')]")
Run Code Online (Sandbox Code Playgroud)

或者:

=FILTERXML("<a><b>"&SUBSTITUTE(SUBSTITUTE(A1,"^","^%"),"%","</b><b>")&"</b></a>","//b[.*0=0]")
Run Code Online (Sandbox Code Playgroud)

您可能有兴趣通过FILTERXML. 也许会让您感兴趣?