Как сохранить «Коды ссылок на символы» (<) при чтении содержимого из файла XML - PullRequest
0 голосов
/ 06 июля 2018

Я использовал приведенный ниже код для чтения содержимого из XML-файла

public static void toXSD() {
    SAXBuilder saxBuilder = new SAXBuilder();
    Document document;
        try {
            document = saxBuilder.build(new File("D:\\Users\\schintha\\Desktop\\Work\\\test_files\\SUMMARY_11.xml"));
            for (Element element : document.getRootElement().getChildren()) {
                System.out.println("Name = " + element.getName());
                System.out.println("Value = " + element.getValue());
                System.out.println("Text = " + element.getText());                  
            }        
        } catch (JDOMException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();}}

Мой входной файл показан ниже:

<?xml version="1.0" encoding="UTF-8"?>
<temp>
   <position>&lt;</position>   
</temp>

Вывод

Name = position
Value = <
Text = <

В связи с этим я прошу сообщить мне, как получить &lt; как есть, вместо «<», поскольку это не начало тега, а значение тега «position» </p>

Ответы [ 2 ]

0 голосов
/ 28 марта 2019

Используя метод text-commons org.apache.commons.text.StringEscapeUtils class escapeXml10, мы можем избежать кодов ссылок на символы в тегах xml - StringEscapeUtils.escapeXml10(element.getValue())

Полный пример показан ниже

public static void toXSD() {
    SAXBuilder saxBuilder = new SAXBuilder();
    Document document;
        try {
            document = saxBuilder.build(new File("D:\\Users\\schintha\\Desktop\\Work\\\test_files\\SUMMARY_11.xml"));
            for (Element element : document.getRootElement().getChildren()) {
                System.out.println("Name = " + element.getName());
                System.out.println("Value = " + StringEscapeUtils.escapeXml10(element.getValue()));                                  
            }        
        } catch (JDOMException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();}}

Тот же самый входной файл, который использовался в вопросе:

<?xml version="1.0" encoding="UTF-8"?>
<temp>
   <position>&lt;</position>   
</temp>

получил ожидаемый результат (значение тега позиции без разбора)

Name = position
Value = &lt;
0 голосов
/ 06 июля 2018

Вы не можете.Это задача парсера - декодировать такие вещи и предоставлять вам базовые данные независимо от того, как они были представлены.&lt; представляет символ <, так что это то, что парсер дает вам.

...