<node> test
test
test
</node>
我希望我的XML解析器读取<node>
和
	
),换行符(

)或空格(
) - 则应将其留下。我正在尝试下面的代码,但它会保留重复的空格。
dbf = DocumentBuilderFactory.newInstance();
dbf.setIgnoringComments( true );
dbf.setNamespaceAware( namespaceAware );
db = dbf.newDocumentBuilder();
doc = db.parse( inputStream );
以任何方式做我想做的事吗?
谢谢!
答案 0 :(得分:1)
第一部分 - 替换多个空格 - 相对容易,但我不认为解析器会为你做这些:
InputSource stream = new InputSource(inputStream);
XPath xpath = XPathFactory.newInstance().newXPath();
Document doc = (Document) xpath.evaluate("/", stream, XPathConstants.NODE);
NodeList nodes = (NodeList) xpath.evaluate("//text()", doc,
XPathConstants.NODESET);
for (int i = 0; i < nodes.getLength(); i++) {
Text text = (Text) nodes.item(i);
text.setTextContent(text.getTextContent().replaceAll("\\s{2,}", " "));
}
// check results
TransformerFactory.newInstance()
.newTransformer()
.transform(new DOMSource(doc), new StreamResult(System.out));
这是困难的部分:
如果节点包含XML编码字符:标签(
	
),换行符(

)或空格(
) - 它们应该保留。
解析器将始终将"	"
转换为"\t"
- 您可能需要编写自己的XML解析器。
我认为任何XML解析器都不会报告应用程序的数字字符引用 - 它们将始终展开。实际上,您的应用程序不应该关心这一点,而不是关心属性之间有多少空格。