2

我必须用 Java 修改 XML 文件中的一些属性。输入 XML 的所有属性值都用单引号括起来。

但是在对文档进行了所有更改之后,当我将文档保存到 XML 文件中时,所有属性值都用双引号引起来。

XMLOutputter xmlOutput = new XMLOutputter();
xmlOutput.output(doc, new FileWriter(path));

有什么办法可以让输出器使用单引号?

谢谢

4

1 回答 1

5

从技术上讲,是的....但是....单引号和双引号之间在语义上没有什么不同....(来自 JDOM 的结果文档同样有效)....是否有一个非常好的理由需要去做这个?如果有的话,我很想知道,也许将它作为 JDOM 的“本机”特性引入......

但是,您可以通过(仅)一点工作来更改它的格式——大约 15 行代码...... JDOM2 API 理论上使这变得相当容易。您可以使用AbstractXMLOutputProcessor的子类创建自己的XMLOutputProcessor并覆盖printAttribute() 方法...例如(摆脱一些您可能不需要的代码路径(如非转义输出):

private static final XMLOutputProcessor CUSTOMATTRIBUTEQUOTES = new AbstractXMLOutputProcessor() {

    @Override
    protected void printAttribute(final Writer out, final FormatStack fstack,
                            final Attribute attribute) throws IOException {

            if (!attribute.isSpecified() && fstack.isSpecifiedAttributesOnly()) {
                return;
            }
            write(out, " ");
            write(out, attribute.getQualifiedName());
            write(out, "=");

            write(out, "'"); // Changed from "\""

            // JDOM Code used to do this:
            //  attributeEscapedEntitiesFilter(out, fstack, attribute.getValue());
            // Now we instead change to quoting the ' instead of "
            String value = Format.escapeAttribute(fstack.getEscapeStrategy(), value);
            // undo any " escaping that the Format may have done.
            value = value.replaceAll(""", "\"");
            // do any ' escaping that needs to be done.
            value = value.replaceAll("'", "'");
            write(out, value);

            write(out, "'"); // Changed from "\""
    }
};

现在你有了这个 cusome 输出器,你可以像这样使用它:

XMLOutputter xmlOutput = new XMLOutputter(CUSTOMATTRIBUTEQUOTES);
xmlOutput.output(doc, new FileWriter(path));
于 2013-09-11T14:24:09.117 回答