有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java从XML过滤格式化文本节点

我的代码创建了一个在基本文本编辑器中很难阅读的XML文档。我试着使用transformer.setOutputProperty(OutputKeys.INDENT, "yes"),这要好得多,但现在当我读回XML时,我有了所有这些以前没有的恼人的文本节点。所有这些文本节点都包含换行符“\n”。当我读回XML时,是否有任何方法可以排除它们,而不必编写代码来自行解析和删除它们?也许是某种过滤器

编辑

我检查了丹尼尔关于{}的建议,但遇到了两个问题:

  1. 我必须将DOMBuilderFactory置于验证模式
  2. 验证模式需要DTD-我没有DTD,我正在创建的程序允许用户动态创建新标签

因此,让事情变得更复杂一点,有没有一种方法可以在没有DTD的情况下做到这一点?或者,在保存XML文件时,是否有一种简单的方法来创建DTD


共 (2) 个答案

  1. # 1 楼答案

    大多数XML解析器都有跳过空文本节点的选项,就像它们总是出现一样。至少Xerces是这样。该特性称为

    http://apache.org/xml/features/dom/include-ignorable-whitespace

    并允许禁用它(如果我读对了,默认情况下会启用它)。说明:

    True:       Includes text nodes that can be considered "ignorable whitespace" in the DOM tree. 
    False:      Does not include ignorable whitespace in the DOM tree. 
    Default:    true 
    Note:       The only way that the parser can determine if text is ignorable
                is by reading the associated grammar and having a content model
                for the document. When ignorable whitespace text nodes are included
                in the DOM tree, they will be flagged as ignorable. The ignorable 
                flag can be queried by calling the
                TextImpl#isIgnorableWhitespace():boolean method.  
    
  2. # 2 楼答案

    一个XSL Transform就可以了,这正是XSL的作用。操纵XML文件以不同的格式显示它们。这将是非常简单的过滤出有问题的节点,只是通过未触及的其他一切

    无论您做什么,请尝试使用正则表达式来解析XML,XML不是一个regular language,使用正则表达式来解析XML是一条通向madness和更糟糕的错误脆弱代码的道路