繁体   English   中英

如何从Java文件中以字符串形式读取XML内容

[英]How to read XML content as String from a file in Java

我从源代码中获取了一个文本文件,该文本文件中的以下内容为一行。

<employees><employee><id>101</id><name>Lokesh Gupta</name><title>Author</title></employee><employee><id>102</id><name>Brian Lara</name><title>Cricketer</title></employee></employees>

在我的代码中,我必须将每个员工数据读取为String。 例如: <employee><id>101</id><name>Lokesh Gupta</name><title>Author</title></employee>作为字符串, <employee><id>102</id><name>Brian Lara</name><title>Cricketer</title></employee>作为另一个字符串。 当我在控制台上打印内容时,它必须打印<employee><id>101</id><name>Lokesh Gupta</name><title>Author</title></employee> 你能让我知道怎么做吗?

通常,我从源代码中获取的文件包含一行中的100+百万个员工详细信息,我必须将所有这些员工详细信息读取为单独的String并将其存储在其他文件中。 由于文件很大,因此我尝试使用SAX解析器,并且能够解析xml内容,但无法将整个数据读取为字符串。

我尝试使用SAX Parser和默认处理程序读取此内容。 但是在startElement和EndElement方法中,我必须编写逻辑以分别追加<></> 我想知道更好的阅读方法,而不是编写逻辑来添加尖括号。

一种方法是使用JaxB的流功能,该功能有效地使用了下面的SAX。 这是一个例子:

 // create JAXBContext for the primer.xsd
        JAXBContext context = JAXBContext.newInstance("primer");

        Unmarshaller unmarshaller = context.createUnmarshaller();

        // purchase order notification callback
        final PurchaseOrders.Listener orderListener = new PurchaseOrders.Listener() {
            public void handlePurchaseOrder(PurchaseOrders purchaseOrders, PurchaseOrderType purchaseOrder) {
                System.out.println("this order will be shipped to "
                        + purchaseOrder.getShipTo().getName());
            }
        };

        // install the callback on all PurchaseOrders instances
        unmarshaller.setListener(new Unmarshaller.Listener() {
            public void beforeUnmarshal(Object target, Object parent) {
                if(target instanceof PurchaseOrders) {
                    ((PurchaseOrders)target).setPurchaseOrderListener(orderListener);
                }
            }

            public void afterUnmarshal(Object target, Object parent) {
                if(target instanceof PurchaseOrders) {
                    ((PurchaseOrders)target).setPurchaseOrderListener(null);
                }
            }
        });

        // create a new XML parser
        SAXParserFactory factory = SAXParserFactory.newInstance();
        factory.setNamespaceAware(true);
        XMLReader reader = factory.newSAXParser().getXMLReader();
        reader.setContentHandler(unmarshaller.getUnmarshallerHandler());

        for (String arg : args) {
            // parse all the documents specified via the command line.
            // note that XMLReader expects an URL, not a file name.
            // so we need conversion.
            reader.parse(new File(arg).toURI().toString());
        }
    }
}

它直接取自jaxb / ri https://github.com/javaee/jaxb-v2/blob/master/jaxb-ri/samples/src/main/samples/streaming-unmarshalling/src/Main.java中的 jaxB示例

PurchaseOrders.Listener接口是:

public static interface Listener {
        void handlePurchaseOrder(PurchaseOrders purchaseOrders, PurchaseOrderType purchaseOrder);
    }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM