Dmi*_*ich 6 java xml parsing sax
<node> test
test
test
</node>
Run Code Online (Sandbox Code Playgroud)
我希望我的XML解析器读取字符<node>和:
	),newlines(
)或whitespaces() - 它们应该被保留.我正在尝试下面的代码,但它保留了重复的空白.
dbf = DocumentBuilderFactory.newInstance();
dbf.setIgnoringComments( true );
dbf.setNamespaceAware( namespaceAware );
db = dbf.newDocumentBuilder();
doc = db.parse( inputStream );
Run Code Online (Sandbox Code Playgroud)
有什么办法可以做我想要的吗?
谢谢!
第一部分 - 替换多个空格 - 相对容易,尽管我不认为解析器会为你做这件事:
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));
Run Code Online (Sandbox Code Playgroud)
这是最难的部分:
如果节点包含 XML 编码字符:制表符 (
	)、换行符 (
) 或空格 () - 应保留它们。
解析器总是会"	"变成"\t"- 您可能需要编写自己的 XML 解析器。
我不认为任何 XML 解析器都会向应用程序报告数字字符引用——它们总是会被扩展。实际上,您的应用程序不应该关心这一点,就像关心属性之间有多少空白一样。
| 归档时间: |
|
| 查看次数: |
1302 次 |
| 最近记录: |