如何在PowerAutomate中筛选嵌套XML文件的指定值并保留结构?
Power Automate 嵌套XML筛选实现方案
针对指定嵌套XML,需保留原有结构并仅筛选<VALUE>节点中LABEL="Label1"的项,同时移除<RESULTSHEADER>部分,可按以下步骤操作:
1. 解析XML内容
添加Parse XML动作,将原始XML填入「Content」字段。点击「Generate schema」自动生成XML架构,确保所有节点、属性被系统正确识别。
2. 提取基础内容
先提取无需筛选的
- 用Compose动作暂存
的属性值: - METHOD:
body('Parse_XML')?['RESULTS']?['RESULT']?['@attributes']?['METHOD'] - OBJECT:
body('Parse_XML')?['RESULTS']?['RESULT']?['@attributes']?['OBJECT']
- METHOD:
- 直接保留
和<HEADER>的原内容,后续用于重构XML。</li> </ul> <h2 id="_3-嵌套筛选与节点">3. 嵌套筛选<SECTION>与<MEAS>节点 <a class="header-anchor" href="#_3-嵌套筛选与节点" aria-hidden="true">#</a></h2> <p>由于<SECTION>和<MEAS>均为集合,需嵌套处理:</p> <h3 id="_3-1-处理集合">3.1 处理<SECTION>集合 <a class="header-anchor" href="#_3-1-处理集合" aria-hidden="true">#</a></h3> <p>添加<strong>Select</strong>动作,输入为<code>body('Parse_XML')?['RESULTS']?['RESULT']?['SECTION']</code>,映射规则:</p> <ul> <li><code>@attributes</code>: <code>item()?['@attributes']</code></li> <li><code>TITLE</code>: <code>item()?['TITLE']</code></li> <li><code>MEAS</code>: 嵌套一个新的<strong>Select</strong>动作,输入为<code>item()?['MEAS']</code></li> </ul> <h3 id="_3-2-处理集合">3.2 处理<MEAS>集合 <a class="header-anchor" href="#_3-2-处理集合" aria-hidden="true">#</a></h3> <p>在内层Select中,设置映射规则:</p> <ul> <li><code>@attributes</code>: <code>item()?['@attributes']</code></li> <li><code>TITLE</code>: <code>item()?['TITLE']</code></li> <li><code>VALUE</code>: 使用<code>filterArray</code>函数筛选指定LABEL的节点:<pre class="hljs"><code class="language- volc-pre-code">filterArray(item()?['VALUE'], equals(item()?['@attributes']?['LABEL'], 'Label1')) </code></pre> </li> </ul> <h2 id="_4-重构目标xml">4. 重构目标XML <a class="header-anchor" href="#_4-重构目标xml" aria-hidden="true">#</a></h2> <p>将提取的基础内容和筛选后的集合拼接成目标XML:<br> 添加<strong>Compose</strong>动作,使用以下表达式(替换动作名称为你实际的动作名):</p> <pre class="hljs"><code class="language-xml volc-pre-code"><RESULT METHOD="@outputs('Compose_RESULT_METHOD')" OBJECT="@outputs('Compose_RESULT_OBJECT')"> <TITLE>@body('Parse_XML')?['RESULTS']?['RESULT']?['TITLE']</TITLE> <HEADER> <START_TEST>@body('Parse_XML')?['RESULTS']?['RESULT']?['HEADER']?['START_TEST']</START_TEST> <END_TEST>@body('Parse_XML')?['RESULTS']?['RESULT']?['HEADER']?['END_TEST']</END_TEST> </HEADER> @xml(json(concat('{"SECTION":', outputs('Outer_Select'), '}'))) </RESULT> </code></pre> <p>该表达式会将筛选后的SECTION集合转换为XML节点,与基础内容拼接生成最终结果。</p> <h2 id="备选方案:xpath直接筛选">备选方案:XPath直接筛选 <a class="header-anchor" href="#备选方案:xpath直接筛选" aria-hidden="true">#</a></h2> <p>若熟悉XPath,可简化操作:</p> <ol> <li>添加<strong>Compose</strong>动作,输入原始XML内容。</li> <li>用<strong>XPath</strong>动作提取<RESULT>的头部内容:<pre class="hljs"><code class="language-xpath volc-pre-code">/RESULTS/RESULT/TITLE | /RESULTS/RESULT/HEADER </code></pre> </li> <li>用<strong>XPath</strong>动作提取筛选后的完整SECTION结构:<pre class="hljs"><code class="language-xpath volc-pre-code">/RESULTS/RESULT/SECTION/TITLE | /RESULTS/RESULT/SECTION/MEAS/TITLE | /RESULTS/RESULT/SECTION/MEAS/VALUE[@LABEL='Label1'] </code></pre> </li> <li>最后将所有提取的节点与<RESULT>属性拼接成完整XML。</li> </ol> <p>内容的提问来源于stack exchange,提问作者Malte Geissler</p>
相关产品推荐
相关产品推荐

