2

例-

<Envision>
      <Employee>
         <Employee-code>Shiva kumar</Employee-code>
         <Employee-Name>474</Employee-Name>
      </Employee>
  <Employee>
         <Employee-code>Santhosh Kumar</Employee-code>
         <Employee-Name>475</Employee-Name>
      </Employee>
</Envision>

上記のxmlのようにxmlファイルを作成したいのですが、これしかできません-

<Employee>
<Employee-code>Shiva kumar</Employee-code>
<Employee-name>474</Employee-name>
<Employee>

</Envision>

次のコードで

DocumentBuilderFactory factory=DocumentBuilderFactory.newInstance();

  DocumentBuilder builder=factory.newDocumentBuilder();

  Document doc=builder.newDocument();

  Element root=doc.createElement("Envision");

  doc.appendChild(root);

  Element ele=doc.createElement("Employee_Name");
  ele.appendChild(doc.createTextNode("Shiva Kumar"));
  root.appendChild(ele);

  ele=doc.createElement("Employee_Code");
  ele.appendChild(doc.createTextNode("474"));
  root.appendChild(ele);

  TransformerFactory transformerFactory =TransformerFactory.newInstance();
  Transformer transformer = transformerFactory.newTransformer();
  DOMSource source = new DOMSource(doc);
  StreamResult result =  new StreamResult(System.out);
  transformer.transform(source, result);

従業員コードタグの後にこのコードを上記のコードに追加して、そのコードに2番目のブロックを追加したいときはいつでも

  Element root1=doc.createElement("Envision");

  doc.appendChild(root1);


      ele=doc.createElement("Employee_Name");
  ele.appendChild(doc.createTextNode("Vijay Babu"));
  root1.appendChild(ele);

  ele=doc.createElement("Employee_Code");
  ele.appendChild(doc.createTextNode(""));
  root1.appendChild(ele);

次に、「ノードの作成は許可されていません」のようなエラー メッセージが表示されます。この場合は助けてください

4

3 に答える 3

1

2 番目のルート要素を作成することはできません。これは XML では単に無効です。しかし、その必要はありません。既存のルート要素を再利用するだけです。質問の冒頭にある XML を見てください。ルート要素が 1 つしかなく、2 つのEmployee要素がありますよね?

Employeeちなみに、要素を作成していない理由は明らかではありません。現在 と を作成Employee_NameしていますEmployee_CodeEnvision、これはサンプル XML と一致しません。

次のように従業員追加コードを抽出することをお勧めします。

private static void addEmployee(Document doc, String name, String code) {
    Element employee = doc.createElement("Employee");
    doc.getDocumentElement().appendChild(employee);

    Element nameElement = doc.createElement("Employee_Name");
    nameElement.appendChild(doc.createTextNode(name));
    employee.appendChild(nameElement);

    Element codeElement = doc.createElement("Employee_Code");
    codeElement.appendChild(doc.createTextNode(name));
    employee.appendChild(codeElement);
}

それで:

Document doc = builder.newDocument();        
Element root = doc.createElement("Envision");        
doc.appendChild(root);

addEmployee(doc, "Shiva Kumar", "474");
addEmployee(doc, "Vijay Babu", "");

addEmployee(または、要素を追加するように変更することもできます。)

于 2012-12-07T12:58:37.160 に答える
0

XML ファイルは、ルート要素を 1 つだけ持つことができます。したがって、さらに多くのEnvisionノードが本当に必要な場合は、 ENVISIONSなどのルート ノードを 1 つ作成します。

<ENVISIONS>
  <ENVISION>
  ...
  <ENVISION>
  <ENVISION>
  ...
  <ENVISION>
</ENVISIONS>

EMPLYEEノードの作成を忘れていませんか?

于 2012-12-07T12:59:17.100 に答える
0

ルート要素を作成すると、別のルート要素を作成してドキュメントに追加することはできません。

doc.appendChild(root);

そのルート要素を取得して、後で別の従業員要素を追加する場合は、doc.getDocumentElement() を呼び出すことができます。

Element root1=doc.getDocumentElement()
于 2012-12-07T13:00:26.693 に答える