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