当前位置: 首页 > 知识库问答 >
问题:

#xd;第13名;在读写XML文件时

阚亮
2023-03-14
Today is a fine day.

So does everyday.

并且在写入之后,输出

Today is a fine day.

So does everyday.

实际预期和所需产出

<someNode>Today is a fine day.

So does everyday.
</someNode>

节点文本值中的新行是有意的,需要保持原样。

// Get Input XML stream from API
URL apiURL = new URL(API_Url);
HttpsURLConnection httpsAPIURLConn;
httpsAPIURLConn = (HttpsURLConnection) apiURL.openConnection();
httpsAPIURLConn.setConnectTimeout(10000); // timeout
httpsAPIURLConn.setDoInput(true);
InputStream inStream = httpsAPIURLConn.getInputStream();

// Data stream okay, Start StaX XLIFF reader
XMLInputFactory xmlInputFactory = XMLInputFactory.newInstance();
// This is to read entity referenced strings
xmlInputFactory.setProperty(XMLInputFactory.IS_COALESCING, true);

// StaX StreamReader
XMLStreamReader xmlStreamReader = xmlInputFactory.createXMLStreamReader(new BufferedInputStream(inStream), "UTF-8");

// Read and load XML data to in-memory database to filter and process
// After processing and writing new Element structure to org.w3c.dom.Document
// write the content into xml file
TransformerFactory transformerFactory = TransformerFactory.newInstance();
Transformer tr = transformerFactory.newTransformer();
tr.setOutputProperty(OutputKeys.INDENT, "yes");
tr.setOutputProperty("{http://xml.apache.org/xslt}indent-amount", "2");
tr.setOutputProperty(OutputKeys.METHOD, "xml");
tr.setOutputProperty(OutputKeys.ENCODING, "UTF-8");
tr.setOutputProperty(OutputKeys.STANDALONE, "no");

DOMSource source = new DOMSource(doc);
File file = new File(xmlFilePath);
Writer outputStream = new OutputStreamWriter(new FileOutputStream(file), "UTF-8");
StreamResult result = new StreamResult(outputStream);
tr.transform(source, result);

不确定我到底错过了什么。但任何建议或帮助都会很好。

共有1个答案

唐弘厚
2023-03-14

最简单的解决方案(除了连接到SAX事件流之外)是编写一个XSLT脚本,它可以执行您所需要的功能,并将其作为您的转换器而不是默认的标识转换器来调用

有关建议,请参见http://en.wikipedia.org/wiki/identity_transform#using_xslt。

然后,您需要提供自己的转换文本节点的规则,通过将ASCII13字符转换为空字符串来删除这些字符。详情见https://stackoverflow.com/a/5084382/53897。

 类似资料:
  • 问题内容: 我必须读写XML文件。使用Java读写XML文件的最简单方法是什么? 问题答案: 这是一个快速的DOM示例,显示了如何使用dtd读写简单的xml文件: 和dtd: 首先导入这些: 这是你需要的一些变量: 这是一个阅读器(字符串xml是你的xml文件的名称): getTextValue在这里: 添加一些访问器和更改器,你就完成了!

  • 一、打开、关闭文件 语法为open (filevar, filename),其中filevar为文件句柄,或者说是程序中用来代表某文件的代号,filename为文件名,其路径可为相对路径,亦可为绝对路径。 open(FILE1,"file1"); open(FILE1, "/u/jqpublic/file1"); 打开文件时必须决定访问模式,在PERL中有三种访问模式:读、写和添加。后两种模式的区

  • 13.1 C 文件概述 所谓“文件”是指一组相关数据的有序集合。这个数据集有一个名称,叫做文件名。实际上在前面的各章中我们已经多次使用了文件,例如源程序文件、目标文件、可执行文件、库文件 (头文件)等。 文件通常是驻留在外部介质(如磁盘等)上的,在使用时才调入内存中来。从不同的角度可对文件作不同的分类。从用户的角度看,文件可分为普通文件和设备文件两种。 普通文件是指驻留在磁盘或其它外部介质上的一个

  • 导语 从Qt 4.3开始引入了两个新的类来读取和写入XML文档:QXmlStreamReader和QXmlStreamWriter。 QXmlStreamReader类提供了一个快速的解析器通过一个简单的流API来读取格式良好的XML文档,它是作为Qt的SAX解析器的替代品的身份出现的,因为它比SAX解析器更快更方便。QXmlStreamReader可以从QIODevice或者QByteArray

  • 问题内容: 我必须阅读tomcat日志文件,并在一段时间(例如:一个小时)后再次读取该文件(仅针对新添加的内容),因此我创建了RandomAccessFile来记录我完成的最后一个位置并使用BufferedReader.readLine()方法。 但是,我发现有时我无法读取文件的整行。 例如,tomcat正在尝试编写以下内容(仅作为示例): 192.168.0.0本地主机/index.html .

  • 13.1 cache.log cache.log包含多种消息,例如Squid的配置信息、性能警告、以及严重错误。如下是cache.log的输出样本: 2003/09/29 12:09:45| Starting Squid Cache version 2.5.STABLE4 for i386- unknown-freebsd4.8... 2003/09/29 12:09:45|