Azure Logic Apps中获取XML内FIToFICstmrCdtTrf节点下首个子节点的问题
解决XPath查询带默认命名空间XML的问题
你的问题核心在于XML存在默认命名空间,而XPath默认不会自动识别默认命名空间下的节点,导致你写的表达式无法正确定位到目标节点,进而返回异常的二进制数据。
问题分析
你的XML根节点Document带有默认命名空间:
<Document xmlns="urn:iso:std:iso:20022:tech:xsd:pacs.008.001.02">
在XPath中,默认命名空间下的节点不能直接用裸名称(比如FIToFICstmrCdtTrf)查询,必须先为这个命名空间绑定一个前缀,再通过前缀来定位节点。
解决方案
以你使用的xpath()函数(看起来像是Power Automate/Logic Apps环境)为例,正确的写法需要先声明命名空间前缀,再构造XPath表达式:
获取FIToFICstmrCdtTrf下的首个子节点
xpath(xml(triggerBody()), 'declare namespace pacs="urn:iso:std:iso:20022:tech:xsd:pacs.008.001.02"; /pacs:Document/pacs:FIToFICstmrCdtTrf/*[1]')
如果你想直接定位到GrpHdr节点(也就是首个子节点),也可以写:
xpath(xml(triggerBody()), 'declare namespace pacs="urn:iso:std:iso:20022:tech:xsd:pacs.008.001.02"; /pacs:Document/pacs:FIToFICstmrCdtTrf/pacs:GrpHdr')
表达式说明
declare namespace pacs="...":为默认命名空间绑定一个名为pacs的前缀(前缀名可以自定义,比如iso也可以)。/pacs:Document/pacs:FIToFICstmrCdtTrf:通过前缀定位到目标父节点。/*[1]:选取该节点下的第一个子节点;如果明确知道子节点名称,直接写/pacs:GrpHdr会更精准。
内容的提问来源于stack exchange,提问作者EFK
相关产品推荐
相关产品推荐

