我正在开发一个使用 Dom4J 编写 xml 文件的程序。我正在写入的数据库模式有一个方便的 xml 验证和导入模式。 Dom4J 运行良好,但是,我似乎无法弄清楚如何在 Dom4J 的 XMLWriter 类中设置“保留”字段。我有一个特定的元素,我需要在其中保留编码的 '\n'。
这个类的 javadoc 文档有点不足 http://dom4j.sourceforge.net/dom4j-1.6.1/apidocs/org/dom4j/io/XMLWriter.html
我试过玩弄 OutputFormat 对象,但没有骰子。
谁能告诉我如何确保 XMLWriter 对象在写入文件时保留 dom4j 树元素的空白。
谢谢,
唐纳德
假设我从:
Element accession = factory.createElement("title");
List<String> AUT = new ArrayList<String>;
AUT.add("author1");
AUT.add("author2");
String title = "Title";
我希望输出类似于:
<title>author1
author2
Title</title>
将行返回编码到标题字段中。
DefaultEntity e = new DefaultEntity("#10");
if(AUT.size() > 1) {
for(String a : AUT) {
accession.addText(a);
accession.add(e);
}
accession.addText(title);
}
这不起作用,因为它是 IllegalAddException。
最佳答案
首先,“preserve”属性与保留先前编码字符的编码无关——而是与保留元素中包含的空格有关。此属性通常由 xml:space="preserve" 属性控制。
但是,如果您的用例是您的输入中有一个编码的换行符,并且您希望将其保留在输出中,那么您就有麻烦了。 DOM4J 会将所有实体和字符引用解码为其对应的 Java 字符 (UTF-16)。这可以通过配置底层 XMLreader 来部分控制,但据我所知,没有 XMLReader 会报告字符引用的开始和结束——这些将被它们相应的字符值默默地替换。
在输出时,XMLWriter 将只对那些需要编码的字符进行编码,无论是因为 XML 规则还是因为序列化时使用的编码(例如 UTF-8 或 ISO-8859-1 等)。
在这种情况下,您基本上有两种选择。
1) 子类 XMLWriter 并完全替换 characters() 方法,因为空白的处理实际上是该方法固有的。没有其他方法可以拦截制表符、换行符或回车符的写入。在这里,您必须以某种方式跟踪您的位置并识别您正在处理正确的换行符
2) 在设置 resolveEntityRefs 时,确定要“重新转义”的换行符并用 DefaultEntity("#10") 节点替换它> XMLWriter 的属性设置为 false。此选项意味着将现有文本节点一分为二,并在中间插入实体节点。
似乎选项 2 涉及较少的工作,但仍然很麻烦
更新:
好吧,看来你不能添加相同的实体两次。如果每次工作时都添加一个新的实体实例。但是,您的案例可以通过添加 xml:space="preserve" 到您的元素来解决。
if (AUT.size() > 1) {
for (String a : AUT) {
accession.addText(a);
accession.addText("\n");
}
accession.addText(title);
}
然后
accession.addAttribute(QName.get("space", Namespace.XML_NAMESPACE),
"preserve");
在这种情况下,无论写入 xml 时使用的输出格式如何,都应保留显式添加的换行符。
抱歉造成混淆。
关于java - Dom4J 在写入文件时保留空格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7795009/
好的,所以我的目标是轻松地将一些数据保存到磁盘以备后用。您如何简单地写入然后读取一个对象?所以如果我有一个简单的类classCattr_accessor:a,:bdefinitialize(a,b)@a,@b=a,bendend所以如果我从中非常快地制作一个objobj=C.new("foo","bar")#justgaveitsomerandomvalues然后我可以把它变成一个kindaidstring=obj.to_s#whichreturns""我终于可以将此字符串打印到文件或其他内容中。我的问题是,我该如何再次将这个id变回一个对象?我知道我可以自己挑选信息并制作一个接受该信
我真的很习惯使用Ruby编写以下代码:my_hash={}my_hash['test']=1Java中对应的数据结构是什么? 最佳答案 HashMapmap=newHashMap();map.put("test",1);我假设? 关于java-等价于Java中的RubyHash,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/22737685/
我正在尝试使用boilerpipe来自JRuby。我看过guide从JRuby调用Java,并成功地将它与另一个Java包一起使用,但无法弄清楚为什么同样的东西不能用于boilerpipe。我正在尝试基本上从JRuby中执行与此Java等效的操作:URLurl=newURL("http://www.example.com/some-location/index.html");Stringtext=ArticleExtractor.INSTANCE.getText(url);在JRuby中试过这个:require'java'url=java.net.URL.new("http://www
我只想对我一直在思考的这个问题有其他意见,例如我有classuser_controller和classuserclassUserattr_accessor:name,:usernameendclassUserController//dosomethingaboutanythingaboutusersend问题是我的User类中是否应该有逻辑user=User.newuser.do_something(user1)oritshouldbeuser_controller=UserController.newuser_controller.do_something(user1,user2)我
什么是ruby的rack或python的Java的wsgi?还有一个路由库。 最佳答案 来自Python标准PEP333:Bycontrast,althoughJavahasjustasmanywebapplicationframeworksavailable,Java's"servlet"APImakesitpossibleforapplicationswrittenwithanyJavawebapplicationframeworktoruninanywebserverthatsupportstheservletAPI.ht
这篇文章是继上一篇文章“Observability:从零开始创建Java微服务并监控它(一)”的续篇。在上一篇文章中,我们讲述了如何创建一个Javaweb应用,并使用Filebeat来收集应用所生成的日志。在今天的文章中,我来详述如何收集应用的指标,使用APM来监控应用并监督web服务的在线情况。源码可以在地址 https://github.com/liu-xiao-guo/java_observability 进行下载。摄入指标指标被视为可以随时更改的时间点值。当前请求的数量可以改变任何毫秒。你可能有1000个请求的峰值,然后一切都回到一个请求。这也意味着这些指标可能不准确,你还想提取最小/
HashMap中为什么引入红黑树,而不是AVL树呢1.概述开始学习这个知识点之前我们需要知道,在JDK1.8以及之前,针对HashMap有什么不同。JDK1.7的时候,HashMap的底层实现是数组+链表JDK1.8的时候,HashMap的底层实现是数组+链表+红黑树我们要思考一个问题,为什么要从链表转为红黑树呢。首先先让我们了解下链表有什么不好???2.链表上述的截图其实就是链表的结构,我们来看下链表的增删改查的时间复杂度增:因为链表不是线性结构,所以每次添加的时候,只需要移动一个节点,所以可以理解为复杂度是N(1)删:算法时间复杂度跟增保持一致查:既然是非线性结构,所以查询某一个节点的时候
遍历文件夹我们通常是使用递归进行操作,这种方式比较简单,也比较容易理解。本文为大家介绍另一种不使用递归的方式,由于没有使用递归,只用到了循环和集合,所以效率更高一些!一、使用递归遍历文件夹整体思路1、使用File封装初始目录,2、打印这个目录3、获取这个目录下所有的子文件和子目录的数组。4、遍历这个数组,取出每个File对象4-1、如果File是否是一个文件,打印4-2、否则就是一个目录,递归调用代码实现publicclassSearchFile{publicstaticvoidmain(String[]args){//初始目录Filedir=newFile("d:/Dev");Datebeg
我基本上来自Java背景并且努力理解Ruby中的模运算。(5%3)(-5%3)(5%-3)(-5%-3)Java中的上述操作产生,2个-22个-2但在Ruby中,相同的表达式会产生21个-1-2.Ruby在逻辑上有多擅长这个?模块操作在Ruby中是如何实现的?如果将同一个操作定义为一个web服务,两个服务如何匹配逻辑。 最佳答案 在Java中,模运算的结果与被除数的符号相同。在Ruby中,它与除数的符号相同。remainder()在Ruby中与被除数的符号相同。您可能还想引用modulooperation.
我想知道Ruby用来在命令行打印这些东西的输出流:irb(main):001:0>a="test"=>"test"irb(main):002:0>putsatest=>nilirb(main):003:0>a=>"test"$stdout是否用于irb(main):002:0>和irb(main):003:0>?而且,在这两次调用之间,$stdout的值是否有任何变化?另外,有人能告诉我打印/写入这些内容的Ruby源代码吗? 最佳答案 是的。而且很容易向自己测试/证明。在命令行试试这个:ruby-e'puts"foo"'>test.