записывать данные jsonobject в теги xml - PullRequest
0 голосов
/ 31 августа 2018

Я хочу прочитать из XML-файла JSONObject и записать его в другой XML-файл.

Но я где-то ошибаюсь, чтобы записать JSONObject в XML-файл в Java.

Я использую файл jar org.json

Могу ли я знать, где я иду не так?

Требование: Записать JSONObject в файл XML в тегах.

Фрагмент моего кода:

public class xmltojson
{
    static String line="",str="";
    public static void main(String[] args) throws JSONException, IOException
    {
        String link = "SOURCE_FILEPATH\\Files.xml";
        BufferedReader br = new BufferedReader(new FileReader(link));
        while ((line = br.readLine()) != null)
        {
           str+=line;
        }

        JSONObject jsondata = XML.toJSONObject(str);

        String xml = XML.toString(jsondata);

        String xmlFile = DESTINATION_FILEPATH\\filefromjson.xml";

        try (FileWriter fileWriter = new FileWriter(xmlFile))
        {
            fileWriter.write(XML.toString(jsondata));
        }
    }
}

Токовый выход:

<?xml version="1.0"?>

-<Files>

<clsid>{215B2E53-57CE-475c-80FE-9EEC14635851}</clsid>

<disabled>0</disabled>


-<File>

    <clsid>{50BE44C8-567A-4ed1-B1D0-9234FE1F38AF}</clsid>

    <image>0</image>

    <uid>{18348506-E3DE-4C1E-A2DC-B91087376BC4}</uid>

    <name>default.jpeg</name>

    <disabled>0</disabled>


    -<Properties>

        <fromPath>C:\Users\Administrator\Documents\dragon_ball_kai-goku.jpeg</fromPath>

        <hidden>0</hidden>

        <action>C</action>

       <targetPath>C:\Users\Administrator\Downloads\default.jpeg</targetPath>

       <readOnly>0</readOnly>

       <archive>1</archive>

    </Properties>

    <status>default.jpeg</status>

    <changed>2018-08-14 06:36:56</changed>

</File>


....

Но ожидаемый результат:

<?xml version="1.0" encoding="UTF-8"?>

-<Files disabled="0" clsid="{215B2E53-57CE-475c-80FE-9EEC14635851}">


    -<File disabled="0" clsid="{50BE44C8-567A-4ed1-B1D0-9234FE1F38AF}" uid="{18348506-E3DE-4C1E-A2DC-B91087376BC4}" changed="2018-08-14 06:36:56" image="0" status="default.jpeg" name="default.jpeg">

        <Properties hidden="0" archive="1" readOnly="0" targetPath="C:\Users\Administrator\Downloads\default.jpeg" fromPath="C:\Users\Administrator\Documents\dragon_ball_kai-goku.jpeg" action="C"/>

</File>

1 Ответ

0 голосов
/ 31 августа 2018

При просмотре документации XML.toJSONObject метод:

Преобразование правильно сформированной (но не обязательно допустимой) строки XML в объект JSONObject. Некоторая информация может быть потеряна при этом преобразовании, поскольку JSON - это формат данных, а XML - это формат документа . XML использует элементы, атрибуты и текст контента, в то время как JSON использует неупорядоченные коллекции пар имя / значение и массивы значений. JSON не любит различать элементы и атрибуты . Последовательности подобных элементов представлены в виде JSONArrays. Текст контента может быть помещен в элемент контента. Комментарии, прологи, DTD и <[[]]> ​​игнорируются.

Из-за утраты такой информации преобразованный обратно XML не равен исходному XML.

Чтобы решить проблему, используйте JSONML.toJSONObject. Как документация метода:

Преобразование правильно сформированной (но не обязательно допустимой) строки XML в объект JSONObject с использованием преобразования JsonML. Каждый тег XML представлен как JSONObject со свойством tagName. Если у тега есть атрибуты, атрибуты будут в JSONObject как свойства . Если тег содержит дочерние элементы, объект будет иметь свойство childNodes, которое будет массивом строк и JSONML JSONObjects . Комментарии, прологи, DTD и <[[]]> ​​игнорируются.

Этот сайт предоставляет более подробную информацию о JsonML.

Проверьте следующий код для различных

import org.json.JSONException;
import org.json.JSONML;
import org.json.JSONObject;
import org.json.XML;

public class JsonToXml {
    public static void main(String[] args) throws JSONException {

        String originalXML = "<?xml version=\"1.0\"?><a t=\"tt\"><b><c>1</c><c>2</c></b></a>";
        System.out.println("oringinal XML:" + originalXML);
        JSONObject jsonConvertByXML = XML.toJSONObject(originalXML);
        System.out.println("jsonConvertByXML:" + jsonConvertByXML);

        String xmlConvertedBackByXML = XML.toString(jsonConvertByXML);
        System.out.println("xmlConvertedBackByXML:" + xmlConvertedBackByXML);

        JSONObject jsonConvertByJSONML = JSONML.toJSONObject(originalXML);
        System.out.println(jsonConvertByJSONML);
        String xmlConvertedBackByJSONML = JSONML.toString(jsonConvertByJSONML);
        System.out.println("xmlConvertedBackByJSONML:" + xmlConvertedBackByJSONML);
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...