gpt4 book ai didi

java - 如何用 Java 从文件中读取 XML 内容作为字符串

转载 作者:太空宇宙 更新时间:2023-11-04 09:34:41 24 4
gpt4 key购买 nike

我从源中获得一个文本文件,其中单行包含以下内容。

<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>作为另一个字符串。当我在控制台上打印内容时,它必须打印 <employee><id>101</id><name>Lokesh Gupta</name><title>Author</title></employee> 。您能告诉我该怎么做吗?

通常,我从来源获得的文件在一行中包含 100 多个员工详细信息,我必须将所有这些员工详细信息作为单独的字符串读取并将其存储在其他文件中。由于文件大小很大,我尝试使用 SAX 解析器,并且可以解析 xml 内容,但无法将整个数据作为字符串读取。

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

最佳答案

实现此目的的一种方法是使用 JaxB 的 Streaming 功能,该功能在底层有效地使用 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 接口(interface)是:

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

关于java - 如何用 Java 从文件中读取 XML 内容作为字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56652952/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com