我有一個固定的XML模板,並且每個數據的節點可能會增加。 如果我有一個固定的模板。如何在提供父節點名稱時迭代所有子節點? 我可以根據xpath製作XML嗎?如何使用java製作動態xml
我都有以下代碼: -
Map map = hm();
Set set = map.entrySet();
// Get an iterator
Iterator it = set.iterator();
// Display elements
while(it.hasNext()) {
Map.Entry me = (Map.Entry)it.next();
if (check) {
xpath_String+= "|"+me.getKey();
}else {
xpath_String+= me.getKey();
check = true;
}
}
DocumentBuilderFactory domFactory = DocumentBuilderFactory.newInstance();
domFactory.setNamespaceAware(true);
DocumentBuilder builder = domFactory.newDocumentBuilder();
//xml file name acts as template
Document doc = builder.parse("template.xml");
XPathFactory factory = XPathFactory.newInstance();
XPath xpath = factory.newXPath();
XPathExpression expr = xpath.compile(xpath_String);
Object result = expr.evaluate(doc, XPathConstants.NODESET);
NodeList nodes = (NodeList) result;
System.out.println("Total number of tokens: "+nodes.getLength());
//for (int i = 0; i < nodes.getLength(); i++) {
int i=0;
StringTokenizer st = new StringTokenizer(xpath_String,"|");
while (st.hasMoreElements()) {
String val = (String) st.nextElement();
if(hm().containsKey(val)){
System.out.println("Node value is: "+nodes.item(i).getNodeName());
nodes.item(i).setTextContent(hm().get(val).toString());
i++;
}
}
//}
//write the content into xml file
TransformerFactory transformerFactory = TransformerFactory.newInstance();
Transformer transformer = transformerFactory.newTransformer();
DOMSource source = new DOMSource(doc);
// generating the output file name
StreamResult finalResult = new StreamResult(new File("newfxml.xml"));
transformer.transform(source, finalResult);
//making a string for the dom
StringWriter writer = new StringWriter();
StreamResult stResult = new StreamResult(writer);
transformer.transform(source, stResult);
在這裏,我有一個固定的模板,我的地圖。從地圖上我得到了xpath及其相應的值。這隻適用於模板xml中沒有任何節點重複自身。所以我想知道是否有任何方法可以迭代整個xml節點塊,當我得到一個可重複的組件。 有沒有這樣的解決方案? 或者我需要改變方式我打算繼續?
發佈您的xml示例。然後告訴我們你有什麼嘗試。然後告訴我們你卡在哪裏了。然後通過例子告訴我們你真正想要的東西。 – darioo 2010-12-14 09:30:55
你有XSD嗎?如果是這樣,你可以使用類似XMLBeans的東西。 – saugata 2010-12-14 09:35:17
不,我沒有XSD .. – sanjay 2010-12-14 09:48:52