<?xml version="1.0" encoding="UTF-8"?>
<DbVisualizer>
<Databases>
<Database id="1">
<Alias>MyMssqlServer</Alias>
<Url />
<Driver>SQL Server (jTDS)</Driver>
<Userid>db_monitor</Userid>
<Profile>auto</Profile>
<Type>sqlserver</Type>
<Password>ABCDEFGHSIFJSDSDKJSD</Password>
<ServerInfoFormat>1</ServerInfoFormat>
<AutoDetectType>true</AutoDetectType>
<Properties>
<Property key="dbvis.ConnectionModeMigrated">true</Property>
</Properties>
<UrlFormat>0</UrlFormat>
<UrlVariables>
<Driver>
SQL Server (jTDS)
<UrlVariable UrlVariableName="Server">192.168.1.1</UrlVariable>
<UrlVariable UrlVariableName="Port">1433</UrlVariable>
<UrlVariable UrlVariableName="Database">abcdefg</UrlVariable>
</Driver>
</UrlVariables>
<SshSettings>
<SshEnabled>false</SshEnabled>
<SshHost />
<SshPort>22</SshPort>
<SshUserid />
<SshPassword />
<SshPrivateKeyFile />
<SshPassphrase />
</SshSettings>
</Database>
</DbVisualizer>
И у меня есть процесс обеспечения, который сгенерировал для меня новый сервер с sqlserver, и мне нужно добавить туда свойства в этот XML файл, поэтому в основном мне нужно дублировать раздел элемента "База данных", изменяя несколько свойств и подталкивая его вправо после уже существующего элемента базы данных. Для этого я создал шаблон для этого раздела во внешнем файле. Я меняю то, что мне нужно, но как можно добавить весь раздел в файл, я знаю, что могу сделать это одним из элементов в время, но это много элементов, поэтому я хочу нажать весь этот раздел после того, что у меня есть:
<Database id="IDNUMBER">
<Alias>MACHINAME</Alias>
<Url />
<Driver>SQL Server (jTDS)</Driver>
<Userid>db_monitor</Userid>
<Profile>auto</Profile>
<Type>sqlserver</Type>
<Password>ABCDEFGHSIFJSDSDKJSD==</Password>
<ServerInfoFormat>1</ServerInfoFormat>
<AutoDetectType>true</AutoDetectType>
<Properties>
<Property key="dbvis.ConnectionModeMigrated">true</Property>
</Properties>
<UrlFormat>0</UrlFormat>
<UrlVariables>
<Driver>
SQL Server (jTDS)
<UrlVariable UrlVariableName="Server">MACHINEIP</UrlVariable>
<UrlVariable UrlVariableName="Port">1433</UrlVariable>
<UrlVariable UrlVariableName="Database">abcdefg</UrlVariable>
</Driver>
</UrlVariables>
<SshSettings>
<SshEnabled>false</SshEnabled>
<SshHost />
<SshPort>22</SshPort>
<SshUserid />
<SshPassword />
<SshPrivateKeyFile />
<SshPassphrase />
</SshSettings>
</Database>
Я предполагаю, что у вас есть основной XML-документ внутри объекта myDocument
который является экземпляром класса org.w3c.dom.Document
и у вас есть текущий экземпляр шаблона внутри объекта newDatabase
который является экземпляром класса org.w3c.dom.Node
.
Теперь вам нужно извлечь узел <Databases/>
из myDocument
и добавить к newDataBase
узел newDataBase
NodeList nodes = myDocument.getElementsByTagName("Databases");
nodes.item(0).appendChild(newDataBase);
Метод appendChild() добавляет узел после последнего дочернего узла указанного узла элемента.
- EDIT: прочитать ваш шаблон из файла и получить узел, который вы можете сделать
FileInputStream fileInputStream = new FileInputStream(TEMPLATE_FILE_PATH);
Document document = DocumentBuilderFactory.newInstance().newDocumentBuilder().parse(fileInputStream);
Node newDataBase = document.getDocumentElement();
- SECOND EDIT: перед добавлением узла newDataBase
в myDocument
вы должны дублировать узел и передать право собственности на узел в целевой документ с этой строкой кода:
Node newNode = myDocument.importNode(newDataBase, true);
то вы можете добавить newNode
в myDocument
используя предыдущий код.