вставить блок в XML-файл Java

1

<?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>
Теги:
string
automation

1 ответ

1
Лучший ответ

Я предполагаю, что у вас есть основной 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 используя предыдущий код.

  • 0
    пока раздел о новом элементе базы данных находится внутри временного текстового файла, как мне импортировать это содержимое текстового файла в анодный объект?
  • 0
    @AviFreege посмотреть мои правки
Показать ещё 2 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню