【问题标题】:Extract complete content from xml with Tika使用 Tika 从 xml 中提取完整内容
【发布时间】:2014-09-24 21:12:47
【问题描述】:

我想用 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>

【问题讨论】:

    标签: xml apache apache-tika


    【解决方案1】:

    您的问题是您使用纯文本内容处理程序来捕获内容。如果你想要 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());
    

    【讨论】:

    • 这个解决方案似乎也不能以正确的方式工作。 ToXMLContentHandler 和 XMLParser 的输出是,内容以 html 格式构建,正文包含提取的元素,没有标签。我尝试使用 TXTParser,它现在似乎可以工作,但我认为这只是一个肮脏的解决方案。
    • 如果您只想要原始 XML,为什么还要使用 Tika? Tika 的重点是为您提供一系列格式的一致元数据和 xhtml/纯文本
    • 我想像我一样,发帖人不想要原始 XML(我的意思是很明显,发帖人不想要原始 XML!),但更智能。仅使用 TXTParser 不会取消转义序列或删除特殊字符。例如 Baz" 应该提取为 Foo bar barValue Baz
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-17
    • 2011-03-30
    • 1970-01-01
    • 1970-01-01
    • 2017-03-27
    • 1970-01-01
    相关资源
    最近更新 更多