【问题标题】:Dataweave 2.0 - XML control/special character escaping [duplicate]Dataweave 2.0 - XML 控件/特殊字符转义 [重复]
【发布时间】:2021-08-06 17:01:52
【问题描述】:

更新:上下文是 MuleSoft,任何库都可以用来解决这样的场景。

我有一个不寻常的要求,即我需要在 API 实现中接受“不正确的 XML”,并且基本上正确地转义了 XML 中不应出现的区域中的任何控制字符,即在属性或元素数据中它们可以在任何地方发生。

这是为了防止最初的 APIKit/Schema 验证错误,以及需要有效 XML 的进一步 DW 转换。

试图在下面描绘一个简单的例子:

<CARS>
  <CAR>
    <MODEL ALIAS="City & Co">alpha city</MODEL>
    <YEAR>1992</YEAR>
    <MANAFACTURER>Penguin</MANAFACTURER>
    <OTHER>Made in UK & US</OTHER>
  </CAR>
  <CAR>
    <MODEL ALIAS="City & Co" MAKE="BMW">venturi city</MODEL>
    <YEAR>1994</YEAR>
    <MANAFACTURER>Penguin</MANAFACTURER>
    <OTHER>BHP > 1000</OTHER>
  </CAR>
</CARS>

是否有任何易于在 DW 或外部库中解析 XML 并且基本上正确地转义控制字符(如 & 和 )?

【问题讨论】:

  • 一些 TagSoup 或 HTML 解析器可能会工作,但我不知道您是否或如何在您的上下文中使用它们。
  • 例如,xsltfiddle.liberty-development.net/3MP42Ns 使用 David Carlisle 的标签汤解析器的 XSLT 2 实现将您的标记解析为 XML。要将其提供给 XSLT,我已将其作为 CDATA 部分包装到输入元素中,但您可以使用命名模板运行并传入文件 URI 并使用 unparsed-text 或将内容作为字符串参数传入。
  • 这不是一个罕见的问题,但它是一个非常困难的问题。生成无效 XML 的人需要认识到他们让用户的生活变得非常困难 - 这就像给人们一个只能使用非标准灯泡的灯具。
  • 我认为结束这个问题并不完全公平,因为提到的其他解决方案并未专门针对问题范围内的 Mule。
  • 感谢大家的投入。这似乎表明可能需要探索像 TagSoup 这样的第三方库,但不确定这对于 MuleSoft 是否微不足道。另外,我同意 Aled,如果我同意,最好保持开放状态,因为这可能是我第一次遇到这个问题,我相信这并不少见,听听其他人的想法会很有用。

标签: xml special-characters dataweave mulesoft control-characters


【解决方案1】:

生成的不是 XML,而是格式与 XML 相似的字符串。问题是没有任何符合标准的解析器会像提供的示例那样解析无效的 XML。您可以尝试使用 DataWeave、Groovy、Java 等中的字符串操作来破解它,但在正确转义特殊字符之前不能使用 XML。以这种方式很难涵盖所有可能的情况。也许将每个值包含在 cdata 部分中会更容易。

真正的解决方案是在源头生成有效的 XML。

【讨论】:

  • 同意,尝试使用字符串操作进行破解将是一场噩梦。我在这里处理的“真实”XML 的结构比我上面分享的简单示例要复杂得多。我已经概述了我的想法,这是错误的技术解决方案,无法从源头解决很多次。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-09-02
  • 1970-01-01
  • 2018-12-14
  • 1970-01-01
  • 2019-05-09
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多