INVALID_CHARACTER_ERR: 指定的 XML 字符无效或非法。

导读:本篇文章讲解 INVALID_CHARACTER_ERR: 指定的 XML 字符无效或非法。,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com

1下面是要读取的xml文件

<?xml version="1.0" encoding="GBK" standalone="no"?><学校>
<学生><学生姓名>tom</学生姓名><学生性别>男</学生性别><学号>2013483124</学号></学生><学生>
<学生姓名>tom</学生姓名><学生性别>男</学生性别><学号>2013483124</学号></学生></学校>

2读取上面文件内容并写入到另一个文件结果报错3尝试输出了每次遍历的节点,结果如下

INVALID_CHARACTER_ERR: 指定的 XML 字符无效或非法。

4#text不是Element对象(#text输出造成原因是因为xml文件每行的节点未正确结束,

上面的xml文件第二行<学生>节点由于有内容并未结束,所以dom读取时会换行读取,就输出#text).。

如下xml文件内容则不会输出#text

<?xml version="1.0" encoding="GBK" standalone="no"?><学校>
<学生><学生姓名>tom</学生姓名><学生性别>男</学生性别><学号>2013483124</学号></学生>
<学生><学生姓名>tom</学生姓名><学生性别>男</学生性别><学号>2013483124</学号></学生></学校>

5如果xml文件内容量大,那么去手动调节节点换行就不好了,直接在读取的时候加入对节点的判断是否是Element

 

if (childlist.item(i) instanceof Element){}

6最后附上我的代码

public static void main(String[] args) throws Exception {
    makexmldata("F:\\test.xml","F:\\test2.xml");
  }


  /**
   * 
   * @param xmlfilepath 源xml文件位置
   * @param desxmlfilepath 生成的目标xml文件位置
   * @throws Exception
   */
  private static void makexmldata(String xmlfilepath,String desxmlfilepath)
      throws Exception {
    // 读xml文件,得到document文档对象
    File f = new File(xmlfilepath);
    DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
    DocumentBuilder builder = factory.newDocumentBuilder();
    // 解析
    Document doc = builder.parse(f);
    // 写xml文件
    DocumentBuilderFactory factorywrite = DocumentBuilderFactory.newInstance();
    DocumentBuilder builderwrite = factorywrite.newDocumentBuilder();
    Document docwrite = builderwrite.newDocument();
    // 创建新xml文档根元素
    Element root = docwrite.createElement("学校");
    docwrite.appendChild(root);
    // 获取原始xml中名称为学生的所有节点
    NodeList nl = doc.getElementsByTagName("学生");
    for (int i = 0; i < nl.getLength(); i++) {
      // 创建新xml文档子节点学生
      Element element = docwrite.createElement("学生");
      // 换行
      element.setTextContent("\n");
      // childlist 学生节点中的所有子节点
      NodeList childlist = nl.item(i).getChildNodes();
      for (int j = 0; j < childlist.getLength(); j++) {
        if (childlist.item(j) instanceof Element) {
          // 根标签学校添加学生节点对象
          root.appendChild(element);
          // 获取节点学生中的子节点对象
          Element nameElement = docwrite.createElement(childlist.item(j).getNodeName());
          Text value = docwrite.createTextNode(childlist.item(j).getTextContent());
          element.appendChild(nameElement);
          nameElement.appendChild(value);
        }
        System.out.println(childlist.item(j).getNodeName());
      }
    }
    // 设置输出文件xml文件内容的编码方式为gbk,避免乱码
    Transformer t = TransformerFactory.newInstance().newTransformer();
    t.setOutputProperty(OutputKeys.ENCODING, "GBK");
    // 生成新的xml文件到指定位置
    t.transform(new DOMSource(docwrite),
        new StreamResult(new FileOutputStream(new File(desxmlfilepath))));
  }

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/14852.html

(0)
小半的头像小半

相关推荐

极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!