将块插入xml文件java

时间:2014-11-19 15:32:19

标签: java xml string automation



<?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>
&#13;
&#13;
&#13;

我有一个为我生成新服务器的配置过程,上面有sqlserver,我需要在这个XML文件中添加属性,所以基本上我需要复制元素的部分&#34;数据库&#34;更改一些属性并在已存在的Database元素之后立即将其推送, 为此,我在外部文件中为此部分创建了一个模板,我正在改变我需要的内容,但是如何将整个部分附加到文件中,我知道我可以一次只做一个元素,但这就是很多元素所以我想在我所拥有的那一段之后推动整个部分:

&#13;
&#13;
<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>
&#13;
&#13;
&#13;

1 个答案:

答案 0 :(得分:1)

我假设您在对象myDocument中有一个主xml文档,它是类org.w3c.dom.Document的一个实例,并且您在对象newDatabase中有当前的模板实例,这是一个类org.w3c.dom.Node的实例。

现在您必须从<Databases />检索myDocument节点并将newDataBase节点附加到其中

NodeList nodes = myDocument.getElementsByTagName("Databases");
nodes.item(0).appendChild(newDataBase);

appendChild()方法在指定元素节点的最后一个子节点之后添加一个节点。

- 编辑:从文件中读取模板并获取可以执行的节点

FileInputStream fileInputStream = new FileInputStream(TEMPLATE_FILE_PATH);
Document document = DocumentBuilderFactory.newInstance().newDocumentBuilder().parse(fileInputStream);
Node newDataBase = document.getDocumentElement();

- 第二次编辑:在将newDataBase节点附加到myDocument之前,您必须复制    节点并将节点的所有权转移到目标文档中    代码行:

   Node newNode = myDocument.importNode(newDataBase, true);

然后您可以使用之前的代码将newNode附加到myDocument