создавать базовые разрывы строк с помощью выражения Xpath из файла Java в файл XML

На протяжении всего обучения программированию Stack Overflow предоставил огромное количество информации и является основным средством обучения тому, как разбираться в разных вещах. Однако для этой проблемы, после поиска в течение нескольких дней и появления с пустыми руками, я решил создать свой первый пост.

Проблема заключается в создании многострочного значения в файле XML из строки java с использованием Xpath Node.setTextContent. Его запись в тег значения в файле XML, который Xpath сообщает как узел элемента. Теперь при записи строкового значения в узел он действительно записывает строковое значение в узел, однако это всего лишь одно длинное строковое значение, поскольку метод setTextContent в соответствии с API ничего не анализирует в строке, а просто записывает текст. . Пример данных, которые я пытаюсь записать: (отредактировано 2-16, только что заметил, что параметр формата не показывает основной пост), отформатированный, как показано ниже, с разбивкой по улице, городскому штату и телефону, как показано ниже ( без пробелов между строками) в соответствии с форматом, указанным в первом примере кода xml.

496 Яркий пр.

Какой-то город, штат, 11111

111-222-3333

Когда строка java записывается в файл xml, она вводится как: 496 Vivid Ave. Some City, State, 11111 111-222-3333.

Пример узла, созданного из родительской программы (не моего java-приложения):

<field sid="ADDRESS">
     <itemlocation>
        <ae>
           <ae>absolute</ae>
           <ae>33</ae>
           <ae>168</ae>
        </ae>
     </itemlocation>
     <value>496 Vivid Ave.
Some City, State, 11111
111-222-3333</value>
     <borderwidth>0</borderwidth>
     <fontinfo>
        <ae>Times New Roman</ae>
        <ae>10</ae>
        <ae>plain</ae>
     </fontinfo>
     <scrollhoriz>wordwrap</scrollhoriz>
     <scrollvert>fixed</scrollvert>
     <format>
        <ae>string</ae>
        <ae>optional</ae>
     </format>
     <acclabel>6.  leave address.
enter street, city, state, zip code and phone number.
</acclabel>
     <size>
        <ae>35</ae>
        <ae>3</ae>
     </size>
     <previous>FIELD5</previous>
     <next>ORDINARY</next>
  </field>

Когда я запускаю свое приложение, вывод необработанных данных xml выглядит следующим образом:

<field sid="ADDRESS">
     <itemlocation>
        <ae>
           <ae>absolute</ae>
           <ae>33</ae>
           <ae>168</ae>
        </ae>
     </itemlocation>
     <value>496 Vivid Ave. Some City, State, 11111 111-222-3333</value>
     <borderwidth>0</borderwidth>
     <fontinfo>
        <ae>Times New Roman</ae>
        <ae>10</ae>
        <ae>plain</ae>
     </fontinfo>
     <scrollhoriz>wordwrap</scrollhoriz>
     <scrollvert>fixed</scrollvert>
     <format>
        <ae>string</ae>
        <ae>optional</ae>
     </format>
     <acclabel>6.  leave address.
enter street, city, state, zip code and phone number.
</acclabel>
     <size>
        <ae>35</ae>
        <ae>3</ae>
     </size>
     <previous>FIELD5</previous>
     <next>ORDINARY</next>
  </field>

Я попытался вручную ввести экранированные символы для перевода строки и возврата каретки в строку, и все, что он делает, это вывод значений кода, а не значения.

Поскольку родительская программа читает мой Java-код, она не разбивает адрес и номер телефона на отдельные строки.

Java, которую я использую, выглядит так:

public void setFieldValue(String sid, String value){
    Node resultNode = null;
    XPath xPath = XPathFactory.newInstance().newXPath();

    try{

        resultNode = (Node)xPath.evaluate(makeFieldString(sid), doc,XPathConstants.NODE);

    }catch(XPathExpressionException xpee){System.out.println(xpee + "Could not retrive node");}
     if (resultNode != null){

        resultNode.setTextContent(value);

    }
    else System.out.println("Epic fail");

    }

public String makeFieldString(String sid){
    String output=null;
    if (sid.equals("POPUP2")){
        output="//popup[@sid='" + sid + "']/value";
    }

    else{
       output=  "//field[@sid='" + sid + "']/value";
    }
    return output;
}

Если у кого-нибудь есть идеи о том, как заставить строку Java включать разрывы строк, которые распознает setTextContent, я бы это оценил. Я подкинул идею попытаться использовать нормализацию текста и данные о пробелах, но не совсем уверен, как это реализовать, и не уверен, что эти методы в любом случае будут исключены из метода setTextContent.

Спасибо за любую помощь! Я надеюсь, что я был достаточно ясен в своем вопросе, чтобы не поджечь!


person Cumberland Engineer    schedule 15.02.2013    source источник
comment
и все, что он делает, это вывод значений кода, а не значения. можете привести пример?   -  person Henry    schedule 15.02.2013
comment
В родительской программе адрес читается так же, как он указан в элементах значения, перечисленных выше. Таким образом, родительская программа считывает адрес в поле адреса как 496 Vivid Ave. Some City, State, 11111 111-222-3333 в одну строку, и слово переносит его по своему усмотрению, а не при создании в родительской программе, в первый набор XML-кода, где номера телефонов/адди форматируются так же, как в XML-коде... ака, где есть возврат, в верхнем примере xml родительская программа считывает разрыв и отображает точно так же, как XML-код... имеет ли это смысл?   -  person Cumberland Engineer    schedule 15.02.2013
comment
да, мне просто интересно, что вы подразумеваете под выводом значений кода. Как это выглядит?   -  person Henry    schedule 15.02.2013
comment
Я не уверен, как быть более кратким :( Приложение, над которым я работаю, предназначено для автоматизации создания некоторых форм, которые мы делаем на работе, поэтому в родительской программе, когда вы вводите улицу addy и нажимаете клавишу возврата, она перемещается вниз по строке, затем вы вводите город, штатный почтовый индекс, затем нажимаете клавишу возврата и вводите номер телефона. когда родительская программа сохраняет файл xml, он вводится в элемент значения, однако вы вводите в поле, которое это первый набор кода xml выше, обратите внимание на форматирование, где есть строки с разрывами строк после каждого набора.   -  person Cumberland Engineer    schedule 15.02.2013
comment
При использовании моего приложения и Xpath, устанавливая текстовое значение узлов для сохранения данных, оно извлекается только из одной строки. Эта строка извлекается из базы данных, и, будучи одной строкой, она сохраняет адрес в одной строке в элементе значения xml, как в примере во втором наборе кода xml. Когда этот xml-файл открывается в родительской программе, он отображает значение адреса так же, как оно указано в этом элементе значения, поэтому он отображает адрес с разрывами контура как единое непрерывное значение. И отображает его как одно значение без форматирования разрыва строки.   -  person Cumberland Engineer    schedule 15.02.2013
comment
может быть проблема, аналогичная этой: stackoverflow.com/questions/6551405/   -  person Clemens Klein-Robbenhaar    schedule 16.02.2013
comment
да, я просмотрел это перед тем, как опубликовать себя, однако в этой ветке вам нужен доступ к DTD, и первоначальный автор не рассказал, как он заставил его работать, но в моем случае я не Не думаю, что это сработает, так как у меня нет доступа к DTD.   -  person Cumberland Engineer    schedule 16.02.2013


Ответы (1)


Я нашел таблицу xpather по адресу http://xpath.alephzarro.com/content/cheatsheet.html, который показывал специальные символы в регулярных выражениях, тогда как Xpath не вставлял значение unicoode разрыва строки, он распознавал \n для новой строки, и теперь адресный блок отформатирован правильно.

person Cumberland Engineer    schedule 16.02.2013