【问题标题】:how to parse a xml with html content as value in java/groovy如何在 java/groovy 中解析带有 html 内容的 xml 作为值
【发布时间】:2021-06-16 13:11:41
【问题描述】:

我需要将下面的 xml 转换为 json,并且嵌套的 HTML 内容保持不变。

<example>
    <value attribute="value">some treatment <b>plant</b> with bio chemicals</value>
</example>

到Json

{
  "example": {
    "value": {
      "attribute": "value",
      "content": "some treatment <b>plant</b> with bio chemicals"
    }
  }
}

我尝试使用所有流行的 libaraies,例如 jackson、org.json、json-simple、JSON-lib。但是我找不到可以开箱即用的库。

如果没有任何方法可以实现此转换,我是否可以知道是否有任何可能的库来执行此操作

【问题讨论】:

  • @stleary(org.json 的作者)建议我们可以包装带有 CDATA &lt;example&gt;&lt;value attribute="value"&gt;&lt;![CDATA[some treatment &lt;b&gt;plant&lt;/b&gt; with bio chemicals]]&gt;&lt;/value&gt;&lt;/example&gt; 标记的 XML 内容,但这不是一个选项。由于 xml 提要不在我的控制范围内。
  • 您没有嵌入 HTML 的 XML,您的 XML 格式不正确。 HTML 不是有效的 XML,无法被 XML 解析器正确解析。这意味着如果您想将 HTML 放入 XML 中,您将不得不对 和 " 符号进行编码。您的示例没有这样做。您可能想出的任何“解决方案”都只会偶然起作用。
  • @jurgen 是的,我同意。但是格式错误的 XML 是我必须解析的,而 groovy 有一个很好的方法来解析它。

标签: java xml groovy xml-parsing


【解决方案1】:

使用Groovy 中的XmlSlurper 解析XML 的解决方案(内部使用轻量级的SAX Parser)。在 java 中,我们可以做同样的事情,但是 groovy GPath 让它变得更加容易。

def parseXMLWithMarkup() {
    String xmlWithMarkup = """
    <example>
        <value attribute="value">some treatment <b>plant</b> with bio chemicals</value>
    </example>
    """;
    example = new groovy.util.XmlSlurper().parseText(xmlWithMarkup)
    textInsideValueWithMarkup = example.childNodes().findAll { it.name() == 'value' }.collect {
        it.children().collect { child ->
            if (child instanceof groovy.util.slurpersupport.Node) {
                return "<" + child.name() + ">" + child.text() + "</" + child.name() + ">"
            } else {
                return child
            }
        }.join('')
    }
    println textInsideValueWithMarkup[0]
}

我们可以通过

访问 XML 值
example.value.text()

我们可以访问 XML 属性值

example.value.@attribute.text()

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-04-09
    • 1970-01-01
    • 2017-10-02
    • 1970-01-01
    • 1970-01-01
    • 2020-05-19
    • 1970-01-01
    • 2013-03-28
    相关资源
    最近更新 更多