2017-06-06 55 views
2

是否可以使用Simple XML將XML標記的內容作爲Java中的字符串獲取? 我正在嘗試使用Converter。我可以使用<tag1>作爲InputNode對象,但是沒有API可以以String的形式檢索內容。我可以使用InputNode.getNext()來迭代子節點,並通過遞歸地檢索名稱,屬性,值等重構內容......但我絕不會確定它會匹配原始XML。如何在SimpleXML(Java)中將InputNode作爲字符串獲取

例子:

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

我想檢索<tag1>以下內容作爲字符串(防止deserialisation所有<tag1>兒童):

<unknownTag>Unknown</unknownTag> 
<otherUnknownTag> 
    <children1>hello</children1> 
    <children2>bye</children2> 
</otherUnknownTag> 

<tag1>的內容尚不得而知在反序列化時間。

回答

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的提出屬性映射和屬性迭代有序按照與地圖鍵相同的順序。
  • 這不能解析嵌套在InputNode的直接子節點中的標籤,或者至少我不知道如何獲得子節點的子節點列表。
相關問題