Привет мир саксонский с Java - PullRequest
0 голосов
/ 04 января 2019

Использование JAR файлов, установленных через apt для Saxon-HE и tagsoup синтаксического анализа html, состоит из одной строки:

thufir@dur:~/saxon$ 
thufir@dur:~/saxon$ java -cp /usr/share/java/Saxon-HE-9.8.0.14.jar:/usr/share/java/tagsoup-1.2.1.jar net.sf.saxon.Query -x:org.ccil.cowan.tagsoup.Parser -qs:doc\(\'http://books.toscrape.com/\'\) 
<?xml version="1.0" encoding="UTF-8"?><!--[if lt IE 7]>      <html lang="en-us" class="no-js lt-ie9 lt-ie8 lt-ie7"> <![endif]--><!--[if IE 7]>         <html lang="en-us" class="no-js lt-ie9 lt-ie8"> <![endif]--><!--[if IE 8]>         <html lang="en-us" class="no-js lt-ie9"> <![endif]--><!--[if gt IE 8]><!--><html xmlns="http://www.w3.org/1999/xhtml" xmlns:html="http://www.w3.org/1999/xhtml" class="no-js" lang="en-us"><!--<![endif]--><head><title>
    All products | Books to Scrape - Sandbox
..        
        <!-- Version: N/A -->

thufir@dur:~/saxon$ 
thufir@dur:~/saxon$ 

Как бы это сделать с Java? В частности, какой импорт требуется от Saxon для этого выполнения? Возможно с использованием Saxon и интерфейса JAXP?

также:

http://codingwithpassion.blogspot.com/2011/03/saxon-xslt-java-example.html

1 Ответ

0 голосов
/ 04 января 2019

Вы найдете много простых примеров вызова преобразований с использованием Saxon из Java в загрузке saxon-ресурсов, доступной как на сайтах saxonica.com, так и на sourceforge.net.

Трудно точно знать, что вы хотите здесь, потому что ваш пример командной строки не использует Saxon для выполнения чего-либо полезного, кроме вызова парсера TagSoup и сериализации результата.Простейший способ сделать это из Java - с помощью преобразования идентификаторов JAXP, которое работает так же хорошо со встроенным преобразователем XSLT в JDK, как и с Saxon:

TransformerFactory factory = TransformerFactory.newInstance();
XMLReader xmlReader = XMLReaderFactory.createXMLReader("org.ccil.cowan.tagsoup.Parser");
Source input = new SAXSource(xmlReader, new InputSource("http://books.toscrape.com/"));
Result output = new StreamResult(System.out);
factory.newTransformer().transform(input, output);

Если вы хотите добавить XSLTили обработка XQuery, конечно, это вполне возможно (я бы всегда использовал API S9api для Saxon, но вы также можете использовать JAXP или XQJ), но детали зависят именно от того, что вы хотите сделать.

...