【问题标题】:MULE 4 - is there a way to check if an XML file contains just one document?MULE 4 - 有没有办法检查一个 XML 文件是否只包含一个文档?
【发布时间】:2021-02-04 21:22:58
【问题描述】:

为了简单起见,我有一个输入 XML 文件 (person.xml):

<person>
    <name>John</name>
    <surname>Doe></surname>
</person>

有没有办法检查文件person.xml是否包含一个且只有一个条目,只是上面的一个?

错误文件示例:

<person>
    <name>John</name>
    <surname>Doe></surname>
</person>
<person>
    <name>Jane</name>
    <surname>Walker</surname>
</person>

一份合适的文件应该只有一个人。

我可以在不使用 Java 的情况下实现这一点吗?

【问题讨论】:

  • &lt;surname&gt; 在示例中被错误地关闭。我编辑了它。

标签: xml mule mule4


【解决方案1】:

您可以使用 DataWeave 2.0 到 read 文件并使用 sizeOf 确定您需要什么。

例如

输入

<persons>
<person>
    <name>John</name>
    <surname>Doe</surname>
</person>
<person>
    <name>John1</name>
    <surname>Doe2</surname>
</person>
</persons>

脚本

%dw 2.0
output application/json
---
a: if(sizeOf(payload.persons) >1) "invalid" else "valid"

输出

{
  "a": "invalid"
}

【讨论】:

    【解决方案2】:

    没有诸如具有多个条目的 XML 文档之类的东西。一个有效的 XML 文档有一个根元素。错误示例有 2,因此不是有效文档。任何正确的 XML 解析器都会将输入视为无效而拒绝。

    Mule Transform 组件会抛出一个 MULE:EXPRESSION 错误,但假设这是由多个根引起的并不是一个好主意。表达式错误可能有许多不同的原因。我强烈建议不要尝试解析错误描述。不能保证描述保持不变,这是一种不好的做法。

    我只是将handle MULE:EXPRESSION 作为一般错误。如果您想澄清原因,您可以返回描述。

    例子:

    Message               : "Illegal to have multiple roots (start tag in epilog?).
     at [row,col {unknown-source}]: [5,2], while reading `payload` as Xml.
     [row,col]: [5,2]" evaluating expression: "%dw 2.0
    ...
    Error type            : MULE:EXPRESSION
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-01-06
      • 2018-06-23
      • 2015-05-30
      • 1970-01-01
      • 1970-01-01
      • 2022-01-05
      • 2014-01-05
      相关资源
      最近更新 更多