是否可以使用简单XML在Java中以字符串形式获取XML标记的内容?
我正在尝试使用Converter做到这一点。我可以将<tag1>视为InputNode对象,但是没有API可以将内容作为String检索。我可以使用InputNode.getNext()迭代这些子项,并通过递归检索名称,属性,值等来重建内容……但是我永远无法确定它是否与原始XML匹配。

例:

<root>
  <tag1>
    <unknownTag>Unknown</unknownTag>
    <otherUnknownTag>
      <children1>hello</children1>
      <children2>bye</children2>
    </otherUnknownTag>
  </tag1>
  <tag2>
    ...
  </tag2>
</root>

我想以字符串的形式检索<tag1>的以下内容(并防止对所有<tag1>子级进行反序列化):
<unknownTag>Unknown</unknownTag>
<otherUnknownTag>
  <children1>hello</children1>
  <children2>bye</children2>
</otherUnknownTag>

在反序列化时,<tag1>的内容未知。

最佳答案

据我所知,这仅是部分可能的。这是我走了多远:

public String getNodeAsString(InputNode node) throws Exception {
    StringBuilder builder = new StringBuilder();

    String value = node.getValue();
    if (value != null) {
        builder.append(value);
    }

    InputNode child = node.getNext();
    while (child != null) {
        builder.append("<").append(child.getName());

        for (String attribute : child.getAttributes()) {
            builder.append(" ")
                    .append(attribute)
                    .append("=\"")
                    .append(child.getAttribute(attribute).getValue())
                    .append("\"");
        }

        builder.append(">")
                .append(child.getValue())
                .append("</").append(child.getName()).append(">");

        value = node.getValue();
        if (value != null) {
            builder.append(value);
        }

        child = child.getNext();
    }

    return builder.toString();
}

这种工作但有两个缺陷:
  • 因为SimpleXML将属性放置到映射中,并且属性迭代的顺序与映射键相同,所以不保留属性的顺序。
  • 这无法解析嵌套在InputNode的直接子级中的标签,或者至少我不知道如何获取子级节点的子级列表。
  • 关于java - 如何在SimpleXML(Java)中将InputNode作为字符串获取,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/44389019/

    10-11 15:08