У меня есть файл свойств, который имеет ключевые значения тега имени в файлах 2 xml
, один из которых является исходным, а другой - адресом назначения.Добавление содержимого из одного XML-файла в другой в JAVA
Мне нужно проверить, есть ли тег имени с тем же значением из файла свойств в месте назначения xml, если его там я ничего не должен делать, если его нет, то исходный XML-файл должен быть итерирован для поиска имени значение тега, которое находится в файле свойств. После того, как он нашел то же имя тега должно быть добавлено из source.xml
файла destination.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: Он принимает значение ключа файла 1 'четкости' из файла свойств и проверки в destination.xml файле, так как его не там будет добавьте его.
Шаг 2: Он принимает следующее значение ключа файла 2 'xyz' из файла свойств и проверяет файл destination.xml, так как его там нет.
Шаг 3: Он принимает следующее ключевое значение файла 3 'abc' из файла свойств и проверяет его в файле destination.xml или нет, поскольку его там он не будет добавлен.
А теперь destination.xml
должно быть выглядит,
<domain>
<node1>
<name>abc</name>
</node1>
<node0>
<name>xyz</name>
</node0>
<node2>
<name>def</name>
</node2>
</domain>
Это мое требование сделать в JAVA, я пытался много кодирования.
Пожалуйста, помогите мне в этом ..
Спасибо alot Bro, это идеальное изменение кода, которое указало вместо использования вложенных циклов, – Jeelan