【问题标题】:Parsing an XML String does not preserve white spaces inside tag解析 XML 字符串不会保留标记内的空格
【发布时间】:2016-06-27 12:57:24
【问题描述】:

我有一个带有这样标签的 XML 字符串:

<SignatureMethod Algorithm="http://www.w3.org/2000/09/xmldsig#rsa-sha1" />

请注意“/>”之前的空格。由于我的规范,我必须保留这个空白,但是每次我解析字符串时,解析器都会删除那个空白。

这是我的代码(“line”是 XML 字符串):

byte[] base64DecodedResponse = Base64.decode(line);
InputStream stream = new ByteArrayInputStream(base64DecodedResponse);

DocumentBuilderFactory documentBuilderFactory = DocumentBuilderFactory.newInstance();
documentBuilderFactory.setNamespaceAware(true);
documentBuilderFactory.setIgnoringElementContentWhitespace(true);
documentBuilderFactory.setValidating(true);

DocumentBuilder docBuilder = documentBuilderFactory.newDocumentBuilder();

Document document = docBuilder.parse(stream);

我尝试更改解析器(Sax 而不是 javax.xml.parser),但问题仍然存在。 有什么解决办法吗?谢谢。

【问题讨论】:

  • 你的意思是当你将xml输出写回文件时,你需要在每个/>之前放一个空格?如果是这种情况,您可能需要为 xml 编写自己的序列化程序。
  • 我得到一个 Base64 文件,我对其进行解码,并获得了我的 XML 字符串,所有空格都在正确的位置,当我解析字符串以获取一个文档并打印它时,我请注意,“/>”之前的所有空格都消失了。我希望我能更清楚地说明我的情况。感谢您的回复。
  • 如何打印“文档”的内容?
  • Java 类型 Document 不存储任何格式。格式在你刚才所说的打印方法中介绍过。我认为您必须制定自己的打印方法,将空间放置在正确的位置。
  • 我使用 StringWriter 和 Transformer。 transformer.transform(new DOMSource(myDocument), new StreamResult(myStringWriter));然后 System.out.println(myStringWriter.toString());

标签: java xml dom xml-parsing tags


【解决方案1】:

我看到了两种可能性:

  1. 遍历 XML 树(在 document 中)并将结果写入字符串行。

  2. 使用您拥有的 print 方法,然后执行 replaceAll 将每次出现的“/>”替换为“ />”,例如

    String result = result.replaceAll("\\/\\>", " />"); 
    

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-07-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-07
    相关资源
    最近更新 更多