Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/355.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何创建包含两个元素的嵌套xml结构?_Java_Xml_Dom - Fatal编程技术网

Java 如何创建包含两个元素的嵌套xml结构?

Java 如何创建包含两个元素的嵌套xml结构?,java,xml,dom,Java,Xml,Dom,我正在尝试创建一个xml结构,如: <OuterMostElement> <NestedSet> <Element></Element> <Element></Element> </NestedSet> </OuterMostElement> 方法是: public static void createNestedSet(DocumentFragment df)

我正在尝试创建一个xml结构,如:

<OuterMostElement>
  <NestedSet>
      <Element></Element>
      <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
标记的想法不能正常工作?

如果我记得很清楚,您需要使用getelementsbytagnames

要获取要获取的元素,请传递正确的命名空间。

用于封送此类的实例:

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);
}
公共级外层构件{
私有最终集nestedSet=新HashSet();
公共空添加(元素){
添加(元素);
}
公共静态void main(字符串[]args){
XStream XStream=新的XStream();
外层ome=新的外层ome();
ome.添加(新元素(1));
增加(新元素(2));
字符串结果=xstream.toXml(ome);
系统输出打印项次(结果);
}

@Bors你能看到我做错了什么吗?我简化了这些方法,给出了一个简化的示例。这里不允许使用XStream。@极客,我提到了你做错了什么,你没有在getElementsByTagName中提供名称空间,所以在xml中,这不是同一种元素。它没有直接回答你的问题,但为什么不创建一个better API:
createNestedSet(文档文档、列表集)
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);
}