我想将一些数据添加到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在以下代码的第四行中返回一个错误:
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;
为什么会出现此错误?当然,我可以使用name作为孩子并在NodeList中读取所有内容然后使用循环,但我认为这种方式具有更好的性能。
PS:我将模式作为字符串插入。我不知道是否会出现错误,因为错误发生在上一行,但是如果我需要在文件中包含模式,我在哪里保存文件?在原始文件夹中?
答案 0 :(得分:0)
是的,您可以随时使用DOM
,SAX
和Pull Parser
,但请查看下面提到的解析和操作XML数据。
- JAXP
和JAXB
- Castor
答案 1 :(得分:0)
最后,我不得不将name作为值而不是属性并执行循环。这是我存档的唯一选择。