1

次のようなxml構造を作成しようとしています:

<OuterMostElement>
  <NestedSet>
      <Element></Element>
      <Element></Element>
  </NestedSet>
</OuterMostElement>

ドキュメントフラグメントcreateNestedSetを渡すこの構造を作成するために、メソッドを2回続けて呼び出しています。<OuterMostElement>

   <OuterMostElement>
      <NestedSet>
          <Element></Element>
      </NestedSet>
      <NestedSet>
          <Element></Element>
      </NestedSet>
    </OuterMostElement>

メソッドは次のとおりです。

  public static void createNestedSet(DocumentFragment df) {
        if (oTargetLineProperties.isRendered()) {
            Document doc = df.getOwnerDocument();
            Element newParentElem = null;
            newParentElem = createTagIfAbsent(doc, "somenamespace", "NestedSet");
            Element newElem = null;
            newElem = doc.createElementNS("someNameSpace",
                                        "Element");

            newParentElem.appendChild(newElem);
            ((XMLElement)df.getFirstChild()).appendChild(newParentElem);
        }
    }

ヘルパーメソッド createTagIfAbsentは次のとおりです。

  private static Element createTagIfAbsent(Document doc, String nameSpace, String tagName) {
        Element newParentElem;
        NodeList nodes = doc.getElementsByTagName(tagName);
        //Already contains tag . So just return the existing one
        if(nodes!=null && nodes.getLength() > 0){
            newParentElem = (Element)nodes.item(0) ;
        }else{
            newParentElem = doc.createElementNS(nameSpace,tagName);  
        }

        return newParentElem;
    }

NestedSetタグが存在しない場合にのみタグを作成するという考えが正しく機能しないのはなぜですか?

4

2 に答える 2

0

よく覚えていれば、 getElementsByTagNameNS を使用する必要があります

http://docs.oracle.com/javase/1.4.2/docs/api/org/w3c/dom/Document.html#getElementsByTagNameNS%28java.lang.String,%20java.lang.String%29

取得したい要素を取得するには、正しい名前空間を渡します。

于 2013-02-22T16:08:09.433 に答える
0

xStreamを使用して、このクラスのインスタンスをマーシャリングします。

public class OuterMostElement {
   private final Set<Element> nestedSet = new HashSet<Element>();

   public void add(Element element) {
     nestedSet.add(element);
   }

   public static void main(String[] args) {
     XStream xstream = new XStream();

     OuterMostElement ome = new OuterMostElement();
     ome.add(new Element(1));
     ome.add(new Element(2));

     String result = xstream.toXml(ome);
     System.out.println(result);
}
于 2013-02-22T16:08:36.283 に答える