Работа с xml-файлами

Тема в разделе "Java", создана пользователем NickProstoNick, 23 апр 2015.

  1. NickProstoNick

    NickProstoNick Статус как статус :)

    Регистрация:
    22 авг 2008
    Сообщения:
    1.766
    Симпатии:
    39
    Всем привет!
    Не особо владею java, но интересует такой вопрос - есть ли методы/классы для работы с xml-файлами средствами SQL-запросов?
    Загрузку в БД не предлагать.
     
  2. Kmet

    Kmet Well-Known Member

    Регистрация:
    25 май 2006
    Сообщения:
    1.017
    Симпатии:
    1
    именно sql?
    xquery или xpath совсем не устраивают?
     
  3. -master-

    -master- Well-Known Member

    Регистрация:
    14 янв 2012
    Сообщения:
    629
    Симпатии:
    18
    @Kmet, приветствуем бродяг, вернувшихся к очагу :)
     
  4. Kmet

    Kmet Well-Known Member

    Регистрация:
    25 май 2006
    Сообщения:
    1.017
    Симпатии:
    1
  5. -master-

    -master- Well-Known Member

    Регистрация:
    14 янв 2012
    Сообщения:
    629
    Симпатии:
    18
    поднимайте раздел, он вас ждал ;)
    видите какой форум новёхонький, даже репутацию порезали (не всем но и мне и вам досталось, но мы наверстаем), глючноватый местами
    правда у всех пыл поостыл, я еще пока трепыхаюсь ... ну да ничего
     
  6. garrick

    garrick Lotus team
    Lotus team

    Регистрация:
    26 окт 2009
    Сообщения:
    770
    Симпатии:
    50
    XQuery или XPath первый наверное вам подойдёт больше.
     
  7. Kmet

    Kmet Well-Known Member

    Регистрация:
    25 май 2006
    Сообщения:
    1.017
    Симпатии:
    1
    движок, да, классно обновили :bravo:
    но за продвижением и развитием это все же не ко мне, я же программист, я могу только клац клац и в продакшен :fyeah:
    но поделиться каким никаким опытом всегда готов.

    1к сообщение, хм
     
  8. NickProstoNick

    NickProstoNick Статус как статус :)

    Регистрация:
    22 авг 2008
    Сообщения:
    1.766
    Симпатии:
    39
    Спасибо всем!
    Буду пробовать
     
  9. NickProstoNick

    NickProstoNick Статус как статус :)

    Регистрация:
    22 авг 2008
    Сообщения:
    1.766
    Симпатии:
    39
    Подскажите набор библиотек?
    Какие и где взять?
     
  10. NickProstoNick

    NickProstoNick Статус как статус :)

    Регистрация:
    22 авг 2008
    Сообщения:
    1.766
    Симпатии:
    39
    И еще вопрос - возможно ли менять значения в разных нодах по разным условиям?
    Что-то вроде кейса. Очень надо. Помогите
     
  11. Kmet

    Kmet Well-Known Member

    Регистрация:
    25 май 2006
    Сообщения:
    1.017
    Симпатии:
    1
  12. NickProstoNick

    NickProstoNick Статус как статус :)

    Регистрация:
    22 авг 2008
    Сообщения:
    1.766
    Симпатии:
    39
    все же стесняюсь спросить - где скачать найти библиотеку? Облазил много, а не нашел. Только примеры :(
     
  13. Kmet

    Kmet Well-Known Member

    Регистрация:
    25 май 2006
    Сообщения:
    1.017
    Симпатии:
    1
    конкретную реализацию рекомендовать не буду, использовал давно, в каком состоянии они сейчас не знаю

    варианты
    1) Oracle XML Developer's Kit , вроде как имеет приемлемуюю лицензию, но как и все оракловае так просто не скачать, надо регаться, разбираться и т.д.

    2) Saxon HE . http://www.saxonica.com/download/opensource.xml или как белые люди с мавен репозитория http://mvnrepository.com/artifact/net.sf.saxon/Saxon-HE/9.6.0-5
    У этих еще есть платные редакции, на которые можно выклянчить 30 триал, но бесплатная версия выглядит достаточно фичастой

    и тд.
     
  14. NickProstoNick

    NickProstoNick Статус как статус :)

    Регистрация:
    22 авг 2008
    Сообщения:
    1.766
    Симпатии:
    39
    я не совсем правильно описал вопрос с case.
    Пробовал разбираться. Вот такая конструкция меняет все теги value где атрибут NAME родителя равен "TEST"
    Код (Java):
    for $x in doc("file.xml")/root/card
    where $x/row[@NAME="r1"]/VALUE="TEST"
    return replace value of node $x/row[@NAME="r1"]/value with "1111"
    Так вот задача.... мне надо указывать разные value для разных NAME и вернуть это одним результатом
     
  15. Kmet

    Kmet Well-Known Member

    Регистрация:
    25 май 2006
    Сообщения:
    1.017
    Симпатии:
    1
    не очень понимаю в чем проблема
    xquery поддерживает функции http://www.w3schools.com/xquery/xquery_functions.asp

    убрать фильтра из where и подставлять value из функции от NAME
     
  16. garrick

    garrick Lotus team
    Lotus team

    Регистрация:
    26 окт 2009
    Сообщения:
    770
    Симпатии:
    50
    Я в Lotus Notes использую всё штатное, всё это есть в лотусовой JVM
    Код (Java):

    import javax.xml.parsers.DocumentBuilder;
    import javax.xml.parsers.DocumentBuilderFactory;
    import javax.xml.parsers.ParserConfigurationException;
    import javax.xml.xpath.XPath;
    import javax.xml.xpath.XPathConstants;
    import javax.xml.xpath.XPathExpression;
    import javax.xml.xpath.XPathExpressionException;
    import javax.xml.xpath.XPathFactory;
    import org.w3c.dom.Document;
    import org.w3c.dom.NodeList;
     
    Маленький пример (xmlText - это String с разбираемым XML текстом):
    Код (Java):

    DocumentBuilderFactory domFactory = DocumentBuilderFactory.newInstance();
    domFactory.setNamespaceAware(true); // never forget this!
    DocumentBuilder builder = domFactory.newDocumentBuilder();
    InputStream source = new ByteArrayInputStream(xmlText.getBytes("UTF-8"));
    Document doc = builder.parse(source);
    XPathFactory factory = XPathFactory.newInstance();
    XPath xpath = factory.newXPath();
    String xpathQuery = "//error/text()";
    String errorText = xpath.evaluate(xpathQuery, doc);
    if (errorText.equals("")) {
       ...
    }
    [code]
     
  17. garrick

    garrick Lotus team
    Lotus team

    Регистрация:
    26 окт 2009
    Сообщения:
    770
    Симпатии:
    50
    Не понятно. Можно поподробнее?
     
  18. NickProstoNick

    NickProstoNick Статус как статус :)

    Регистрация:
    22 авг 2008
    Сообщения:
    1.766
    Симпатии:
    39
    мм... есть xml-файл
    Код (HTML5):

    <root><card>
    <block>
    <block>
        <row name="r1">param1</row>
        <row name="r2"></row>
        <row name="a3"></row>
    </block>
    <block>
        <row name="r1">param2</row>
        <row name="r2"></row>
        <row name="a3"></row>
    </block>
    <block>
        <row name="r1">param3</row>
        <row name="r2"></row>
        <row name="a3"></row>
    </block>
    </root></card>
     
    У всех блоков в теге с именем r1 содержатся разные значения.
    Задача - во всех блоках в теге с именем r3 заполнить свое значение.
    Для каждого значения r1 есть свое значение r3.
    Таких соответствий положим 100.

    Результатом должен быть набор всех этих измененных блоков (допускается, что блоков может быть меньше исходного количества)
    Код (HTML5):

    <root><card>
    <block>
        <row name="r1">param1</row>
        <row name="r2"></row>
        <row name="a3">val1</row>
    </block>
    <block>
        <row name="r1">param2</row>
        <row name="r2"></row>
        <row name="a3">val2</row>
    </block>
    <block>
        <row name="r1">param3</row>
        <row name="r2"></row>
        <row name="a3">val3</row>
    </block>
    </root></card>
     
     
    #18 NickProstoNick, 6 май 2015
    Последнее редактирование модератором: 6 май 2015
  19. garrick

    garrick Lotus team
    Lotus team

    Регистрация:
    26 окт 2009
    Сообщения:
    770
    Симпатии:
    50
    Может быть XLST? Если все возможные соответствия r1/r3 заранее известны и их можно описать в шаблоне, я бы наверное сделал так.
     
  20. NickProstoNick

    NickProstoNick Статус как статус :)

    Регистрация:
    22 авг 2008
    Сообщения:
    1.766
    Симпатии:
    39
    пробовал... но есть нюансы:
    это должен быть софт, простой для использования, а не простыни xslt.
    Это я к пример у написал соответствие двух строк. В действительности может быть отношение один ко многим.
    Блоков может быть 50-60 тысяч.
    Я понимаю, что эта задача для БД, но пока не получается ее спихнуть... вот и выкручиваюсь :(
     
Загрузка...

Поделиться этой страницей