我从源代码中获取了一个文本文件,该文件中的以下内容为一行。
var url = "//server/application/Database/Edit?id=" + theid;
在我的代码中,我必须将每个员工数据读取为String。例如:<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>
作为字符串,<employee><id>101</id><name>Lokesh Gupta</name><title>Author</title></employee>
作为另一个字符串。当我在控制台上打印内容时,它必须打印<employee><id>102</id><name>Brian Lara</name><title>Cricketer</title></employee>
。你能让我知道怎么做吗?
通常,我从源代码中获取的文件包含一行中的100+百万个员工详细信息,我必须将所有这些员工详细信息读取为单独的String并将其存储在其他文件中。由于文件很大,因此我尝试使用SAX解析器,并且能够解析xml内容,但无法将整个数据读取为字符串。
我尝试使用SAX解析器和默认处理程序读取此内容。但是在startElement和EndElement方法中,我必须编写逻辑以分别附加<employee><id>101</id><name>Lokesh Gupta</name><title>Author</title></employee>
和<
,>
和<
。我想知道一种更好的阅读方法,而不是编写逻辑来添加尖括号。
答案 0 :(得分:0)
一种方法是使用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中的jaxB样本 https://github.com/javaee/jaxb-v2/blob/master/jaxb-ri/samples/src/main/samples/streaming-unmarshalling/src/Main.java
PurchaseOrders.Listener接口是:
public static interface Listener {
void handlePurchaseOrder(PurchaseOrders purchaseOrders, PurchaseOrderType purchaseOrder);
}