用dom4j操作写XML文件,标签中含有冒号,会报 org.dom4j.IllegalAddException: No such namespace prefix: *** is in scope on: org.dom4j.tree.DefaultElement错误,大致意思就是说,冒号前面的内容是未定义的命名空间,那么我们就帮它定义一下,问题即可解决,看下面例子:

这是我需要生成的XML,标签包含 ofd:

<?xml version="1.0" encoding="UTF-8"?>
<ofd:Signature xmlns:ofd="http://www.ofdspec.org/2016">
<ofd:SignedInfo>
<ofd:Provider ProviderName="Eseal" Company="XXX" Version="1.0"/>
<ofd:SignatureMethod>123456789</ofd:SignatureMethod>
<ofd:SignatureDataTime>988746454656</ofd:SignatureDataTime>
<ofd:Reference FileRef="文件地址">
<ofd:CheckValue>qqqqqqqqqqqqqqqqqqqqq</ofd:CheckValue>
</ofd:Reference>
<ofd:StampAmot PageRef="1" ID="index" Boundary="10.0 20.0 30.0 40.0"/>
<ofd:Seal>
<ofd:BaseLoc>Seal.esl</ofd:BaseLoc>
</ofd:Seal>
</ofd:SignedInfo>
<ofd:SignedValue>SignedValue.dat</ofd:SignedValue>
</ofd:Signature>

代码操作的时候,在根节点用

addNamespace("name","dnsURL")

添加命名空间即可,代码比较简单,不做赘述:

import java.io.FileWriter;
import java.io.IOException; import org.dom4j.Document;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.XMLWriter; public class generateXMLTest{ public static void main(String[] args) {
generateSignature("E:\\test.xml");
} public static void generateSignature(String fileAddress) {
FileWriter out = null;
try {
out = new FileWriter(fileAddress);
createDocument().write(out);
OutputFormat format = OutputFormat.createPrettyPrint();
format.setEncoding("UTF-8");
XMLWriter writer = new XMLWriter(System.out, format);//设置XML编码
writer.write(createDocument());
} catch (IOException e) {
e.printStackTrace();
} finally {
if (out != null) {
try {
out.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
} public static Document createDocument() {
Document document = DocumentHelper.createDocument(); Element root = document.addElement("ofd:Signature")
.addAttribute("xmlns:ofd","http://www.ofdspec.org/2016").addNamespace("ofd", "http://www.ofdspec.org/2016");//在此为ofd:添加命名空间 Element SignedInfo = root.addElement("ofd:SignedInfo"); Element Provider = SignedInfo.addElement("ofd:Provider")
.addAttribute("ProviderName", "Eseal")
.addAttribute("Company", "XXX")
.addAttribute("Version", "1.0"); Element SignatureMethod = SignedInfo.addElement("ofd:SignatureMethod");
SignatureMethod.setText("123456789");
Element SignatureDataTime = SignedInfo.addElement("ofd:SignatureDataTime");
SignatureDataTime.setText("988746454656");
Element Reference = SignedInfo.addElement("ofd:Reference")
.addAttribute("FileRef", "文件地址");
Element CheckValue = Reference.addElement("ofd:CheckValue");
CheckValue.setText("qqqqqqqqqqqqqqqqqqqqq");
Element StampAmot = SignedInfo.addElement("ofd:StampAmot")
.addAttribute("PageRef", "1")
.addAttribute("ID", "index")
.addAttribute("Boundary", "10.0 20.0 30.0 40.0");
Element BaseLoc = SignedInfo.addElement("ofd:Seal").addElement("ofd:BaseLoc");
BaseLoc.setText("Seal.esl");
Element SignedValue = root.addElement("ofd:SignedValue");
SignedValue.setText("SignedValue.dat");
return document;
} }

org.dom4j.IllegalAddException: No such namespace prefix: *** is in scope on: org.dom4j.tree.DefaultElement (dom4j写入XML文件,标签中带【:】(冒号)解决办法)的更多相关文章

  1. DOM、SAX、JDOM、DOM4J以及PULL在XML文件解析中的工作原理以及优缺点对比

    1. DOM(Document Object Model)文档对象模型1. DOM是W3C指定的一套规范标准,核心是按树形结构处理数据,DOM解析器读入XML文件并在内存中建立一个结构一模一样的&qu ...

  2. Java进阶(二十七)使用Dom4j解析XML文件

    使用Dom4j解析XML文件 写在前面的话 由于论文实验要求,需要实现操作XML文档,为此想到了dom4j这个工具,使用之后深感受益.在此分享给大家,以此共勉. 注:本文转载自http://blog. ...

  3. 使用dom4j 解析xml文件

    //使用dom4j 解析xml文件,升级版,dom4j是对dom的封装 //重点 package com.offcn.utils; import java.io.File; import java.i ...

  4. dom4j 解析XML文件

    <?xml version="1.0" encoding="UTF-8"?> <!-- 手机的根节点 --> <Phones> ...

  5. dom4j: 生成的XML文件根节点 xmlns="" 的问题

    使用dom4j写入XML文件时,写入完毕后发现root element中没有 xmlns,也即是没有命名空间. 正确的写法如下: Document document = DocumentHelper. ...

  6. 【XML】利用Dom4j读取XML文档以及写入XML文档

    Dom4j简介 dom4j是一个Java的XML API,是jdom的升级品,用来读写XML文件的.dom4j是一个十分优秀的JavaXML API,具有性能优异.功能强大和极其易使用的特点,它的性能 ...

  7. 错误“Unexpected namespace prefix "xmlns" found for tag LinearLayout”的解决方法(转)

    (转自:http://blog.csdn.net/bombzhang/article/details/12676789) 有一次升级开发工具后发现xml脚本出现错误“Unexpected namesp ...

  8. Unexpected namespace prefix "xmlns" found for tag Linear Layout

    原文地址http://blog.csdn.net/taxuexumei/article/details/41523419 今天遇到的问题,,,保存到博客里,下回遇到找博客就行了,,,,,, 今天在制作 ...

  9. 错误“Unexpected namespace prefix "xmlns" found for tag LinearLayout”的解决方法

    编写布局代码时发现xml脚本出现错误“Unexpected namespace prefix "xmlns" found for tag LinearLayout”,原来是一个na ...

随机推荐

  1. ios 之CGRectMake

    首先要弄懂几个基本的概念. 一)三个结构体:CGPoint.CGSize.CGRect 1.  CGPoint [plain] view plaincopy   /* Points. */ struc ...

  2. GSS4 - Can you answer these queries IV || luogu4145上帝造题的七分钟2 / 花神游历各国 (线段树)

    GSS4 - Can you answer these queries IV || luogu4145上帝造题的七分钟2 / 花神游历各国 GSS4 - Can you answer these qu ...

  3. [JOY]1143 飘飘乎居士的约会

    题目描述 又是美妙的一天,这天飘飘乎居士要和MM约会,因此他打扮的格外帅气.但是,因为打扮的时间花了太久,离约会的时间已经所剩无几. 幸运的是,现在飘飘乎居士得到了一张nm的地图,图中左上角是飘飘乎居 ...

  4. WINDOWS下使用Mysql 中碰到的问题记录

    问题:在cmd中输入net stop mysql反馈“服务名无效” win+R打开运行窗口,输入 services.msc 查看其中mysql的服务名,比如我的是叫做MySQL80 让我们继续回到最开 ...

  5. docker系列之分区挂载和数据卷

    容器中的文件系统是独立的, 一旦容器被删除, 则文件系统也会被删除. 如果想容器和实体机在文件系统层面打通, 可以把指定目录挂载到容器当中: docker run -d -p 5000:22 -v / ...

  6. sram bist scripts

    主要三个script: mbist_run: call mbistarchitect tool run.do:run bist flow  bist setup => bist mode(bis ...

  7. 【php】子类覆盖超类方法,在超类里调用此方法会出现何种现象

    <?php class A { public function getName() { echo $this->name(); } function name () { return 'l ...

  8. Hive和Hbase整合

    Hive只支持insert和delete操作,并不支持update操作,所以无法实施更新hive里的数据,而HBASE正好弥补了这一点,所以在某些场景下需要将hive和hbase整合起来一起使用. 整 ...

  9. python 实现计算器功能 输入字符串,输出相应结果

    import re formul='1 - 2 *( (6 0- 30+(0-40/5) * (9-2* 5/3 +7 /3*99/4*2998 +10 *568/14)) - (-4*3) / (1 ...

  10. windowsServer2008搭建域服务器

    为什么要搭建域? 工作组的分散管理模式不适合大型的网络环境下工作,域模式就是针对大型的网络管理需求设计的,就是共享用户账号,计算机账号和安全策略的计算机集合.域中集中存储用户账号的计算机就是域控器,域 ...