我在 build.gradle 中創建了一個修改 XML 檔案的任務。但是,當我使用 XmlUtil.serialize 并將修改后的結構寫回檔案時,屬性中的特殊字符會被轉義。
例如:
<foo name="a.b.>">
</foo>
變成:
<foo name="a.b.>">
</foo>
我怎樣才能防止這種情況發生?我已經嘗試過 XmlNodePrinter,但結果相同。我也嘗試使用 jdom2(添加 buildscript 依賴項),但是構建腳本找不到 jdom2。所以我一直無法嘗試看看這是否有效。
uj5u.com熱心網友回復:
事實證明,XmlUtil 在內部使用 XmlNodePrinter。在 XmlNodePrinter 中,它是硬編碼的,屬性值總是被轉義。我通過創建不轉義值的 XmlNodePrinter 的自定義實作解決了這個問題。
class CustomXmlNodePrinter extends XmlNodePrinter {
CustomXmlNodePrinter(final PrintWriter out) {
super(out);
}
@Override
protected void printNameAttributes(final Map attributes, final XmlNodePrinter.NamespaceContext ctx) {
if (attributes == null || attributes.isEmpty()) {
return;
}
for (final Object p : attributes.entrySet()) {
final Map.Entry entry = (Map.Entry) p;
out.print(" ");
out.print(entry.getKey());
out.print("=");
out.print(quote);
out.print(entry.getValue());
out.print(quote);
printNamespace(entry.getKey(), ctx);
}
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/339844.html
