2014-09-24 31 views
3

我想用tika提取xml文件的完整内容。这意味着tika不应该将文本从元素中移出并丢弃标签。用Tika从xml中提取完整内容

内容的输出中应该是这样的:

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 2014-09-24 13:33:20

+0

如果你只是想要原始XML,为什么你甚至使用Tika? Tika的要点是为您提供一致的元数据和xhtml /纯文本格式 – Gagravarr 2014-09-24 13:53:36

+0

我想像我一样,海报不需要原始XML(我的意思是海报不需要显而易见原始的XML!),但更智能一些。 只使用TXTParser不会逃避转义序列,或删除特殊字符。 例如 <美孚栏=“barValue”> 巴兹< “ 应该被提取作为符 酒吧barValue巴兹<美孚 或相似的。 我无法找到任何方法来做到这一点使用标准的Tika解析器/处理程序,似乎需要编写自定义处理程序,令人伤心。 – barneypitt 2016-08-15 12:31:19