好吧,这个问题为我赢得了“风滚草”徽章,我正在努力找到一些方法来重新描述这个问题,以便更容易理解。以下是我的最新进展:
我最终决定放弃Commons Digester,由于时间限制,很难进一步解决这个问题,因此我没有在Digester项目中记录错误(如果其他人告诉我,我会分享我的经验)。
javax XPath函数对于实现我的需求更为直接,我决定采用以下解决方案:
XPathFactory factory = XPathFactory.newInstance();
XPath xPath = factory.newXPath();
rootQuery = xPath.compile("/job");
textFieldsQuery = xPath.compile("/job/editorial/articlegroup/article/text|/job/editorial/articlegroup/article/flashtext");
Node rootNode = (Node)rootQuery.evaluate(new InputSource(is), XPathConstants.NODE);
PPJob job = new PPJob();
Map<String, String> jobTextFields = new HashMap<String, String>();
NodeList fields = (NodeList)query.evaluate(rootNode, XPathConstants.NODESET);
for (int i = 0; i < fields.getLength(); i++) {
Node field = fields.item(i);
String fieldName = field.getAttributes().getNamedItem("name").getNodeValue();
String fieldContent = field.getNextSibling().getNodeValue();
jobTextFields.put(fieldName, fieldContent);
}
job.setTextFields(jobTextFields);