我有屬性文件,其中有2個xml
文件中的名稱標籤的鍵值,其中一個是源,另一個是目標。在JAVA中將一個xml文件中的內容添加到另一個文件中
我需要檢查屬性文件中是否有相同值的名稱標記存在或不存在於目標xml中,如果存在,我不應該執行任何操作,如果沒有,則應該迭代源xml文件以搜索名稱標籤值來自屬性文件。一旦它發現了相同名稱的標籤應該從source.xml
文件文件添加..
請你幫我在這java代碼
private void updateCofigDestn() throws ParserConfigurationException, TransformerConfigurationException, TransformerException, IOException, SAXException {
prop = loadConfigProperties();
String ConfigSrcFile = prop.getProperty("ConfigSourceFile");
String ConfigDesnFile = prop.getProperty("ConfigDestnFile");
System.out.println("\nConfig Destn Path update config :: " + ConfigDesnFile);
File configSrcFile = new File(ConfigSrcFile + "\\config.xml");
File configDstnFile = new File(ConfigDesnFile + "\\config.xml");
DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
dbFactory.setValidating(false);
DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();
Document docSrc = dBuilder.parse(configSrcFile);
Document docDestn = dBuilder.parse(configDstnFile);
Set <Object> keys = getAllKeys();
for (Object k: keys) {
if (k.toString().startsWith("JDBC")) {
System.out.println("Inside Keys");
String key = (String) k;
keyVal = getPropertyValue(key);
System.out.println(key + ": " + getPropertyValue(key));
NodeList listSrc =
docSrc.getElementsByTagName("jdbc-system-resource");
NodeList listDsn =
docDestn.getElementsByTagName("jdbc-system-resource");
System.out.println("listDsn.item(0)" + listDsn.item(0).getTextContent());
if (listDsn.item(0) != null) {
for (int t = 0; t < listDsn.getLength(); t++) {
Element elmntDsn1 = (Element) listDsn.item(t);
String DsNameDsn1 = elmntDsn1.getElementsByTagName("name").item(0).getTextContent();
System.out.println("DS At DESTN in Update Conf " + DsNameDsn1);
if (keyVal.equalsIgnoreCase(DsNameDsn1)) {} else {
for (int temp = 0; temp < listSrc.getLength(); temp++) {
Element elmntSrc = (Element) listSrc.item(temp);
String DsNameSrc = elmntSrc.getElementsByTagName("name").item(0).getTextContent();
// elmntSrc.getElementsByTagName(keyVal).item(0).getTextContent();
// configDestn(keyVal);
//System.out.println("value bool >>>>> " +res) ;
if (keyVal.equalsIgnoreCase(DsNameSrc) && keyVal != null) {
Node copiedNode = docDestn.importNode(elmntSrc, true);
docDestn.getDocumentElement().appendChild(copiedNode);
System.out.println(" Updating the destination Config File");
TransformerFactory.newInstance().newTransformer().transform(new DOMSource(docDestn),
new StreamResult(new FileWriter(configDstnFile)));
}
}
}
}
} else {
System.out.println("Destination List is null ");
for (int temp = 0; temp < listSrc.getLength(); temp++) {
Element elmntSrc = (Element) listSrc.item(temp);
String elmntValSrc = elmntSrc.getElementsByTagName("name").item(0).getTextContent();
if (keyVal.equalsIgnoreCase(elmntValSrc) &&
keyVal != null) {
Node copiedNode = docDestn.importNode(elmntSrc, true);
docDestn.getDocumentElement().appendChild(copiedNode);
System.out.println(" Updating the destination Config File in NULL");
TransformerFactory.newInstance().newTransformer().transform(new DOMSource(docDestn),
new StreamResult(new FileWriter(configDstnFile)));
}
}
}
}
}
}
對於離..
config.properties
file1 = def
file2 = xyz
file3 = abc
source.xml
destination.xml
<domain>
<node1>
<name>abc</name>
</node1>
</domain>
第一步:這需要文件1 '高清' 的從屬性文件密鑰值,並檢查在destination.xml文件,因爲它不存在它會追加它。
第2步:它從屬性文件中獲取文件2'xyz'值的下一個鍵值並檢查destination.xml文件,因爲它不存在它將附加它。
第3步:它從屬性文件中獲取文件3'abc'的下一個鍵值並在destination.xml中進行檢查,因爲它在那裏不會被附加。
而且現在應該是什麼樣子,
<domain>
<node1>
<name>abc</name>
</node1>
<node0>
<name>xyz</name>
</node0>
<node2>
<name>def</name>
</node2>
</domain>
這是我的要求在JAVA做的,我已經試過編碼的很多。
請幫我解決這個問題..
非常感謝兄弟,這是完美的代碼更改你指出,而不是使用嵌套for循環, – Jeelan