2014-09-24 6 views
3

Я хочу извлечь полное содержимое xml-файла с помощью tika. Это означает, что тика не должна выводить текст из элементов и отбрасывать метки.Извлечь полный контент из xml с помощью Tika

выводе контента должно быть так:

content: 
<?xml version="1.0" encoding="UTF-8" ?> 
<xml> 
    <tag1>text</tag1> 
    <tag2>text</tag2> 
</xml> 

Но результат всегда так:

content: 





    text 
    text 

код программы:

public static void main(String[] args) { 
    try { 
     InputStream input; 

     input = new FileInputStream(new File("D:/SolrTestFileSystem/Test_Files/test.xml")); 

     ContentHandler textHandler = new WriteOutContentHandler(); 
     Metadata metadata = new Metadata(); 
     XMLParser parser = new XMLParser(); 
     ParseContext context = new ParseContext(); 
     parser.parse(input, textHandler, metadata, context); 
     input.close(); 
     System.out.println("content: " + textHandler.toString()); 
    } catch (Exception e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 
} 

XML-файл:

<?xml version="1.0" encoding="UTF-8" ?> 
<xml> 
    <tag1>text</tag1> 
    <tag2>text</tag2> 
</xml> 

ответ

0

Ваша проблема заключается в том, что вы используете текстовый обработчик содержимого для захвата содержимого. Если вы хотите использовать теги XML, вам нужно использовать обработчик содержимого, который их поддерживает!

(Тот факт, что обработчик содержимого называется textHandler намек, что пример вы взяли его из хотели простой текст!)

Как взяты из Apache Tika example for text and xhtml/xml extraction, ваш код должен быть вместо этого:

import org.apache.tika.sax.ToXMLContentHandler; 

InputStream input = TikaInputStream.get(new File("D:/SolrTestFileSystem/Test_Files/test.xml")); 
ContentHandler handler = new ToXMLContentHandler(); 

Metadata metadata = new Metadata(); 
XMLParser parser = new XMLParser(); 
ParseContext context = new ParseContext(); 
parser.parse(input, handler, metadata, context); 

input.close(); 
System.out.println("content: " + handler.toString()); 
+1

Это решение также не работает правильно. Вывод с ToXMLContentHandler и XMLParser заключается в том, что содержимое создается в формате html с телом, содержащим извлеченные элементы без тегов. Я попытался использовать TXTParser, и, похоже, это работает прямо сейчас, но я думаю, что это всего лишь грязное решение. – AKR

+0

Если вам просто нужен необработанный XML, почему вы даже используете Tika? Точка Tika - дать вам согласованные метаданные и xhtml/plain текст из диапазона форматов – Gagravarr

+0

Я полагаю, что, как и я, плакат не хочет сырого XML (я имею в виду, что это очевидно, что плакат не хочет необработанный XML!), но что-то более интеллектуальное. Простое использование TXTParser не отменяет escape-последовательности или не удаляет специальные символы. Например Баз < " должны быть извлечены как Foo бар barValue Baz barneypitt