使用Tika从xml中提取完整内容

3
我希望使用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>
1个回答

0

你的问题是你正在使用一个只能捕获文本内容的处理程序。如果你想要XML标签,你需要使用一个保留它们的处理程序!

(你的处理程序被称为textHandler这个事实暗示了你参考的例子想要纯文本!)

Apache Tika用于文本和xhtml/xml提取的示例中获取的代码应该改为:

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
如果你只想要原始的XML,那你为什么还在使用Tika呢?Tika的目的是从各种格式中提供一致的元数据和xhtml/纯文本。 - Gagravarr
我想,和我一样,发帖者也不想要原始的XML(我的意思是很明显发帖者不想要原始的XML!),而是更智能的东西。仅使用TXTParser无法取消转义序列或删除特殊字符。例如 <Foo bar="barValue"> Baz< </Foo>"应该被提取为 Foo bar barValue Baz< Foo 或类似的内容。我无法找到使用标准Tika解析器/处理程序进行此操作的任何方法,似乎需要编写自定义处理程序。 - barneypitt

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接