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 在以下代码的第四行返回一个错误:

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:我将模式作为字符串插入。我不知道我是否会出错,因为错误在前一行,但如果我需要在文件中包含架构,我应该在哪里保存文件?在原始文件夹中?

4

2 回答 2

0

是的,您总是可以使用DOM,SAXPull Parser,但请查看下面提到的解析和操作 XML 数据的内容。

- JAXPJAXB

- Castor

于 2012-09-24T16:43:53.567 回答
0

最后,我不得不将名称作为一个值而不是作为一个属性并执行循环。这是我存档的唯一选项。

于 2012-10-18T12:38:52.143 回答