我正在尝试创建一个xml结构,如:
<OuterMostElement>
<NestedSet>
<Element></Element>
<Element></Element>
</NestedSet>
</OuterMostElement>
我连续两次调用方法createNestedSet
来创建这个结构,并将<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
标记时才创建{{1}}标记?
答案 0 :(得分:0)
如果我记得很清楚,你需要使用getElementsByTagNameNS
要获取要获取的元素,请传递正确的命名空间。
答案 1 :(得分: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);
}