2017-06-06 9 views
2

Simple XMLを使用してXMLタグの内容をJavaのStringとして取得できますか? 私はConverterを使ってやろうとしています。 <tag1>InputNodeオブジェクトとしてobatinできますが、コンテンツをStringとして取り出すAPIはありません。 InputNode.getNext()で子を繰り返して、名前、属性、値などを再帰的に取得してコンテンツを再構築することはできますが、元のXMLと一致するかどうかは確かではありません。SimpleXMLでInputNodeを文字列として取得する方法(Java)

例:

<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>の内容は知られていませんデシリアライゼーション時に

答えて

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(); 
} 

作品のこの種のが、2つの欠点があります:これは私が持っているどのくらいです

SimpleXMLの属性をマップするために置くと属性の反復が発注されているので
  • 属性の順序は保持されませんマップキーと同じ順序で表示されます。
  • これは、InputNodeの直接の子にネストされたタグを解析できません。少なくとも、子ノードの子のリストを取得する方法はわかりません。
関連する問題