0

次のようなデータを xml ファイルに追加したいと考えています。

<people>
   <person name="Jo">
      <number>0</number>
      ...
   </person>
   <person name="Steve">
      <number>5</number>
      ...
   </person>
</people>

name は id 値です。この表現を使用するのは、追加したい同じ名前の子がいるかどうかを知る必要があるためです。次のように書くだけです。

Document doc = docBuilder.parse(file);
Element person = doc.getElementById("myname");

したがって、すべての nodechild でループを実行する必要はありません。私の問題は、このためにスキーマを定義する必要があることですが、Java は次のコードの 4 行目にエラーを返します。

DocumentBuilderFactory docFactory = DocumentBuilderFactory.newInstance();
docFactory.setNamespaceAware(true);
docFactory.setValidating(true);
docFactory.setAttribute("http://java.sun.com/xml/jaxp/properties/schemaLanguage", "http://www.w3.org/2001/XMLSchema");                      
docFactory.setAttribute("http://java.sun.com/xml/jaxp/properties/schemaSource", "my schema in a string");                       
    DocumentBuilder docBuilder = docFactory.newDocumentBuilder();       

エラーは次のとおりです。

java.lang.IllegalArgumentException: http://java.sun.com/xml/jaxp/properties/schemaLanguage

そして私はインポートしました:

 import javax.xml.parsers.DocumentBuilder;
 import javax.xml.parsers.DocumentBuilderFactory;
 import javax.xml.transform.Transformer;
 import javax.xml.transform.TransformerFactory;
 import javax.xml.transform.dom.DOMSource;
 import javax.xml.transform.stream.StreamResult;


 import org.w3c.dom.Document;
 import org.w3c.dom.Element;

なぜこのエラーが発生するのですか? もちろん、名前を子として使用し、NodeList ですべてを読み取り、ループを使用してこれを行うこともできますが、この方法の方がパフォーマンスが優れていると思います。

PS: スキーマを文字列として挿入します。エラーは前の行にあるため、エラーが発生するかどうかはわかりませんが、スキーマをファイルに保存する必要がある場合、ファイルをどこに保存すればよいですか? 生のフォルダに?

4

2 に答える 2

0

はい、いつでも 、DOMSAXおよびを使用できますがPull Parser、XML データを解析および操作するには、以下で説明するこれらを参照してください。

- JAXPそしてJAXB

- Castor

于 2012-09-24T16:43:53.567 に答える
0

最後に、名前を属性としてではなく値として入力し、ループを実行する必要がありました。それは私がアーカイブする唯一のオプションでした。

于 2012-10-18T12:38:52.143 に答える