使用Java从XML元素中删除空格 [英] Remove white space from XML element using java
问题描述
我有一个如下的JSON
I have a JSON as follows
String str = {'Emp name' : 'JSON','Emp id' : 1,'Salary' : 20997.00}
我想使用Java将JSON转换为XML.我的Java代码在这里.
I want to covert this JSON to XML using java.My java code is here.
JSON json= JSONSerializer.toJSON(str);
XMLSerializer xmlSerializer = new XMLSerializer();
//To Skip the white space from XML data and not from XML Element (By default it does)
xmlSerializer.setSkipWhitespace(true);
//To set type of xml element If it true, it will be type
xmlSerializer.setTypeHintsCompatibility(true);
xmlSerializer.setRootName("book");
String xml = xmlSerializer.write( json );
System.out.println(xml);
如果传递xml且XML元素之间没有任何空格(即Emp名称为Empname和Emp id为Empid),我将得到输出.我想从XML元素中删除空格,而不是从XML Element内容中删除空格.
I am getting an output if I pass the xml without any space between XML element (i.e Emp name as Empname and Emp id as Empid). I want to remove the whitespace from XML element and not from XML Element content.
推荐答案
我反编译并检查了json-lib(2.4)和xom(1.2.5)库.不幸的是,没有关于密钥的这种前/后处理器或处理程序. 这在构建JSON或构建XML时都适用.
I decompiled and checked json-lib(2.4) and xom (1.2.5) libraies. Unfortunately there is no such pre/post processors or handlers regarding to key. This applies both when constructing JSON or building XML as well.
似乎没有其他方法可以手动修复JSON密钥.因此,请检查以下代码段:
Seems like there is no other way to manually fix keys of JSON. So please check below snippet:
public static void main(String[] args) {
String str = "{'Emp name' : 'JSON','Emp id' : 1,'Salary' : 20997.00, " +
"'manager' : {'first name':'hasan', 'last name' : 'kahraman'}," +
"'co workers': [{'first name':'john', 'last name' : 'wick'}, " +
"{'first name':'albert', 'last name' : 'smith'}]}";
JsonConfig config = new JsonConfig();
JSON json = JSONSerializer.toJSON(str, config);
fixJsonKey(json);
XMLSerializer xmlSerializer = new XMLSerializer();
//To Skip the white space from XML data and not from XML Element (By default it does)
xmlSerializer.setSkipWhitespace(true);
//To set type of xml element If it true, it will be type
xmlSerializer.setTypeHintsCompatibility(true);
xmlSerializer.setRootName("book");
String xml = xmlSerializer.write(json);
System.out.println(xml);
}
private static void fixJsonKey(Object json) {
if (json instanceof JSONObject) {
JSONObject jsonObject = (JSONObject) json;
List<String> keyList = new LinkedList<String>(jsonObject.keySet());
for (String key : keyList) {
if (!key.matches(".*[\\s\t\n]+.*")) {
Object value = jsonObject.get(key);
fixJsonKey(value);
continue;
}
Object value = jsonObject.remove(key);
String newKey = key.replaceAll("[\\s\t\n]", "");
fixJsonKey(value);
jsonObject.accumulate(newKey, value);
}
} else if (json instanceof JSONArray) {
for (Object aJsonArray : (JSONArray) json) {
fixJsonKey(aJsonArray);
}
}
}
输出如下:
<?xml version="1.0" encoding="UTF-8"?>
<book>
<Empid type="number">1</Empid>
<Empname type="string">JSON</Empname>
<Salary type="number">20997.0</Salary>
<coworkers class="array">
<e class="object">
<firstname type="string">john</firstname>
<lastname type="string">wick</lastname>
</e>
<e class="object">
<firstname type="string">albert</firstname>
<lastname type="string">smith</lastname>
</e>
</coworkers>
<manager class="object">
<firstname type="string">hasan</firstname>
<lastname type="string">kahraman</lastname>
</manager>
</book>
这篇关于使用Java从XML元素中删除空格的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!