tôi có một tài liệu năm 1000 nhập có định dạng là một cái gì đó giống nhưĐẩy nhanh xpath
<Example>
<Entry>
<n1></n1>
<n2></n2>
</Entry>
<Entry>
<n1></n1>
<n2></n2>
</Entry>
<!--and so on-->
Có hơn 1000 nhập nút ở đây. Tôi đang viết một chương trình Java mà về cơ bản nhận được tất cả các nút một và làm một số phân tích trên mỗi nút. Nhưng vấn đề là thời gian truy hồi của các nút tăng lên với số không. Ví dụ, phải mất 78 mili giây để lấy nút đầu tiên 100 ms để lấy nút thứ hai và nó tiếp tục tăng lên. Và để lấy nút 999, phải mất hơn 5 giây. Điều này cực kỳ chậm. Chúng tôi sẽ cắm mã này vào các tệp XML có hơn 1000 mục nhập. Một số như hàng triệu. Tổng thời gian để phân tích toàn bộ tài liệu là hơn 5 phút.
Tôi đang sử dụng mã đơn giản này để duyệt qua nó. Ở đây nxp
là lớp của riêng tôi có tất cả các phương thức để lấy các nút từ xpath.
nxp.fromXpathToNode("/Example/Entry" + "[" + i + "]", doc);
và doc
là tài liệu cho tệp. i
là không có nút nào để truy xuất.
Ngoài ra khi tôi cố gắng một cái gì đó như thế này
List<Node> nl = nxp.fromXpathToNodes("/Example/Entry",doc);
content = nl.get(i);
tôi phải đối mặt với cùng một vấn đề.
Bất cứ ai có bất kỳ giải pháp nào về cách tăng tốc độ tretirival của các nút, vì vậy phải mất một khoảng thời gian tương tự để nhận được nút thứ nhất cũng như nút 1000 từ tệp XML.
Cảm ơn bạn
đây là mã cho xpathtonode.
public Node fromXpathToNode(String expression, Node context)
{
try
{
return (Node)this.getCachedExpression(expression).evaluate(context, XPathConstants.NODE);
}
catch (Exception cause)
{
throw new RuntimeException(cause);
}
}
và đây là mã dành cho fromxpathtonode.
public List<Node> fromXpathToNodes(String expression, Node context)
{
List<Node> nodes = new ArrayList<Node>();
NodeList results = null;
try
{
results = (NodeList)this.getCachedExpression(expression).evaluate(context, XPathConstants.NODESET);
for (int index = 0; index < results.getLength(); index++)
{
nodes.add(results.item(index));
}
}
catch (Exception cause)
{
throw new RuntimeException(cause);
}
return nodes;
}
và đây là bắt đầu
public class NativeXpathEngine thực hiện XpathEngine
{
tin nhà máy XPathFactory thức;
private final XPath engine;
/**
* Cache for previously compiled XPath expressions. {@link XPathExpression#hashCode()}
* is not reliable or consistent so use the textual representation instead.
*/
private final Map<String, XPathExpression> cachedExpressions;
public NativeXpathEngine()
{
super();
this.factory = XPathFactory.newInstance();
this.engine = factory.newXPath();
this.cachedExpressions = new HashMap<String, XPathExpression>();
}
Mã trong 'fromXpathToNode' và 'fromXpathToNodes 'có vẻ khá liên quan ở đây. Bạn có thể cung cấp mã đó không? –
cần xem mã của bạn tải tài liệu. –
Nếu bạn định truy cập mọi mục nhập, tại sao lại sử dụng XPath? –