如何在SimpleXML(Java)中将InputNode作为String

问题描述 投票:3回答:1

是否可以使用Simple XML将XML标记的内容作为Java中的String获取?我正在尝试使用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>的内容。

java android simple-framework
1个回答
0
投票

据我所知,这可能只是部分原因。这是我有多远:

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将属性放置到map,并且属性迭代按照与map键相同的顺序排序。
  • 这不能解析嵌套在InputNode的直接子节点中的标签,或者至少我不知道如何获取子节点的子节点列表。
© www.soinside.com 2019 - 2024. All rights reserved.