List of usage examples for org.dom4j DocumentHelper createXPath
public static XPath createXPath(String xpathExpression) throws InvalidXPathException
createXPath
parses an XPath expression and creates a new XPath XPath
instance using the singleton DocumentFactory .
From source file:org.mitre.muc.callisto.session.SessionLogger.java
License:Open Source License
/** Retrieves existing file element or creates a new one. */ private Element getFileElement(Element root, URI uri) { XPath xpath = DocumentHelper.createXPath("file[@uri='" + uri.toString() + "']"); List results = xpath.selectNodes(root); Element element = null;//from www.ja va 2s .co m if (results.isEmpty()) { element = root.addElement("file"); element.addAttribute("uri", uri.toString()); } else { element = (Element) results.get(0); } return element; }
From source file:org.mitre.muc.callisto.session.SessionLogger.java
License:Open Source License
/** Retrieves existing session element or creates a new one. */ private Element getSessionElement(Element file, Timer timer) { XPath xpath = DocumentHelper.createXPath("session[@id='" + timer.getId() + "']"); List results = xpath.selectNodes(file); Element element = null;//from ww w . j av a 2 s .c o m if (results.isEmpty()) { element = file.addElement("session"); element.addAttribute("id", String.valueOf(timer.getId())); } else { element = (Element) results.get(0); } return element; }
From source file:org.mitre.muc.callisto.session.SessionLogger.java
License:Open Source License
/** Retrieves iterator over sessions elements */ private Iterator getSessionIterator(Element file) { XPath xpath = DocumentHelper.createXPath("session"); List results = xpath.selectNodes(file); return results.iterator(); }
From source file:org.mule.module.xml.filters.JXPathFilter.java
License:Open Source License
private boolean accept(Object obj) { if (obj == null) { logger.warn("Applying JXPathFilter to null object."); return false; }//from w w w .j av a 2 s . co m if (pattern == null) { logger.warn("Expression for JXPathFilter is not set."); return false; } if (expectedValue == null) { // Handle the special case where the expected value really is null. if (pattern.endsWith("= null") || pattern.endsWith("=null")) { expectedValue = "null"; pattern = pattern.substring(0, pattern.lastIndexOf("=")); } else { if (logger.isInfoEnabled()) { logger.info("Expected value for JXPathFilter is not set, using 'true' by default"); } expectedValue = Boolean.TRUE.toString(); } } Object xpathResult = null; boolean accept = false; Document dom4jDoc; try { dom4jDoc = XMLUtils.toDocument(obj, muleContext); } catch (Exception e) { logger.warn("JxPath filter rejected message because of an error while parsing XML: " + e.getMessage(), e); return false; } // Payload is XML if (dom4jDoc != null) { if (namespaces == null) { // no namespace defined, let's perform a direct evaluation xpathResult = dom4jDoc.valueOf(pattern); } else { // create an xpath expression with namespaces and evaluate it XPath xpath = DocumentHelper.createXPath(pattern); xpath.setNamespaceURIs(namespaces); xpathResult = xpath.valueOf(dom4jDoc); } } // Payload is a Java object else { if (logger.isDebugEnabled()) { logger.debug("Passing object of type " + obj.getClass().getName() + " to JXPathContext"); } JXPathContext context = JXPathContext.newContext(obj); initialise(context); xpathResult = context.getValue(pattern); } if (logger.isDebugEnabled()) { logger.debug("JXPathFilter Expression result = '" + xpathResult + "' - Expected value = '" + expectedValue + "'"); } // Compare the XPath result with the expected result. if (xpathResult != null) { accept = xpathResult.toString().equals(expectedValue); } else { // A null result was actually expected. if (expectedValue.equals("null")) { accept = true; } // A null result was not expected, something probably went wrong. else { logger.warn("JXPathFilter expression evaluates to null: " + pattern); } } if (logger.isDebugEnabled()) { logger.debug("JXPathFilter accept object : " + accept); } return accept; }
From source file:org.nuxeo.cm.core.service.caseimporter.DefaultXMLCaseReader.java
License:Open Source License
@SuppressWarnings("unchecked") private List<Document> readDomDoc(Document doc) throws ClientException { XPath xpathSelector = DocumentHelper.createXPath("/" + ALL_CASES_TAG + "/" + CASE_TAG); List<Element> allCases = xpathSelector.selectNodes(doc); List<Document> caseReaders = new ArrayList<Document>(); for (Element element : allCases) { caseReaders.add(extractEntireCase(element)); }/*from ww w. j av a 2 s . c o m*/ return caseReaders; }
From source file:org.olat.ims.qti.container.ItemContext.java
License:Apache License
/** * Method shuffle. shuffle clones the current item (since the whole qti tree is readonly) and shuffles it * /*from w w w .j av a 2s .c o m*/ * @param item * @return Element */ private Element shuffle(final Element item) { // get the render_choice final XPath choice = DocumentHelper.createXPath(".//render_choice[@shuffle=\"Yes\"]"); final Element tel_rendchoice = (Element) choice.selectSingleNode(item); // if shuffle is disable, just return the item if (tel_rendchoice == null) { return item; } // else: we have to shuffle // assume: all response_label have same parent: either render_choice or a // flow_label final Element shuffleItem = item.createCopy(); // clone the whole item final Element el_rendchoice = (Element) choice.selectSingleNode(shuffleItem); // <!ELEMENT render_choice ((material | material_ref | response_label | // flow_label)* ,response_na?)> // <!ATTLIST response_label rshuffle (Yes | No ) 'Yes' ..... final List el_labels = el_rendchoice.selectNodes(".//response_label[@rshuffle=\"Yes\"]"); final int shusize = el_labels.size(); // set up a list of children with their parents and the position of the // child (in case several children have the same parent final List respList = new ArrayList(shusize); final List parentList = new ArrayList(shusize); final int[] posList = new int[shusize]; int j = 0; for (final Iterator responses = el_labels.iterator(); responses.hasNext();) { final Element response = (Element) responses.next(); final Element parent = response.getParent(); final int pos = parent.indexOf(response); posList[j++] = pos; respList.add(response.clone()); // need to use clones so they are not // attached anymore parentList.add(parent); } Collections.shuffle(respList); // put the children back to the parents for (int i = 0; i < parentList.size(); i++) { final Element parent = (Element) parentList.get(i); final int pos = posList[i]; final Element child = (Element) respList.get(i); parent.elements().set(pos, child); } return shuffleItem; }
From source file:org.olat.ims.qti.render.ResultsBuilder.java
License:Apache License
/** * Method getResDoc.// w ww .ja v a 2s . co m * * @param ai The assessment instance * @param locale The users locale * @param identity * @return Document The XML document */ public Document getResDoc(final AssessmentInstance ai, final Locale locale, final Identity identity) { final AssessmentContext ac = ai.getAssessmentContext(); final DocumentFactory df = DocumentFactory.getInstance(); final Document res_doc = df.createDocument(); final Element root = df.createElement("qti_result_report"); res_doc.setRootElement(root); final Element result = root.addElement("result"); final Element extension_result = result.addElement("extension_result"); // add items (not qti standard, but nice to display original questions -> // put it into extensions) // extension_result. final int sectioncnt = ac.getSectionContextCount(); for (int i = 0; i < sectioncnt; i++) { final SectionContext sc = ac.getSectionContext(i); final int itemcnt = sc.getItemContextCount(); for (int j = 0; j < itemcnt; j++) { final ItemContext it = sc.getItemContext(j); final Element el_item = it.getEl_item(); extension_result.add(el_item); } } // add ims cp id for any media references addStaticsPath(extension_result, ai); // add assessment_result // Add User information final Element context = result.addElement("context"); final User user = identity.getUser(); final String name = user.getProperty(UserConstants.LASTNAME, locale) + " " + user.getProperty(UserConstants.FIRSTNAME, locale) + " (" + identity.getName() + ")"; String instId = user.getProperty(UserConstants.INSTITUTIONALUSERIDENTIFIER, locale); final String instName = user.getProperty(UserConstants.INSTITUTIONALNAME, locale); if (instId == null) { instId = "N/A"; } context.addElement("name").addText(name); String institution; if (instName == null) { institution = "N/A"; } else { institution = instName; } if (institution == null) { institution = "N/A"; } // Add institutional identifier (e.g. Matrikelnummer) final Element generic_identifier = context.addElement("generic_identifier"); generic_identifier.addElement("type_label").addText(institution); generic_identifier.addElement("identifier_string").addText(instId); // Add start and stop date formatted as datetime final Element beginDate = context.addElement("date"); beginDate.addElement("type_label").addText("Start"); beginDate.addElement("datetime").addText(Formatter.formatDatetime(new Date(ac.getTimeOfStart()))); final Element stopDate = context.addElement("date"); stopDate.addElement("type_label").addText("Stop"); stopDate.addElement("datetime").addText(Formatter.formatDatetime(new Date(ac.getTimeOfStop()))); final Element ares = result.addElement("assessment_result"); ares.addAttribute("ident_ref", ac.getIdent()); if (ac.getTitle() != null) { ares.addAttribute("asi_title", ac.getTitle()); } // process assessment score final Element a_score = ares.addElement("outcomes").addElement("score"); a_score.addAttribute("varname", "SCORE"); String strVal = StringHelper.formatFloat(ac.getScore(), 2); a_score.addElement("score_value").addText(strVal); strVal = ac.getMaxScore() == -1.0f ? "N/A" : StringHelper.formatFloat(ac.getMaxScore(), 2); a_score.addElement("score_max").addText(strVal); strVal = ac.getCutvalue() == -1.0f ? "N/A" : StringHelper.formatFloat(ac.getCutvalue(), 2); a_score.addElement("score_cut").addText(strVal); addElementText(ares, "duration", QTIHelper.getISODuration(ac.getDuration())); addElementText(ares, "num_sections", "" + ac.getSectionContextCount()); addElementText(ares, "num_sections_presented", "0"); addElementText(ares, "num_items", "" + ac.getItemContextCount()); addElementText(ares, "num_items_presented", "" + ac.getItemsPresentedCount()); addElementText(ares, "num_items_attempted", "" + ac.getItemsAttemptedCount()); // add section_result final int secnt = ac.getSectionContextCount(); for (int i = 0; i < secnt; i++) { final SectionContext secc = ac.getSectionContext(i); final Element secres = ares.addElement("section_result"); secres.addAttribute("ident_ref", secc.getIdent()); if (secc.getTitle() != null) { secres.addAttribute("asi_title", secc.getTitle()); } addElementText(secres, "duration", QTIHelper.getISODuration(secc.getDuration())); addElementText(secres, "num_items", "" + secc.getItemContextCount()); addElementText(secres, "num_items_presented", "" + secc.getItemsPresentedCount()); addElementText(secres, "num_items_attempted", "" + secc.getItemsAttemptedCount()); // process section score final Element sec_score = secres.addElement("outcomes").addElement("score"); sec_score.addAttribute("varname", "SCORE"); strVal = secc.getScore() == -1.0f ? "N/A" : "" + StringHelper.formatFloat(secc.getScore(), 2); sec_score.addElement("score_value").addText(strVal); strVal = secc.getMaxScore() == -1.0f ? "N/A" : "" + StringHelper.formatFloat(secc.getMaxScore(), 2); sec_score.addElement("score_max").addText(strVal); strVal = secc.getCutValue() == -1 ? "N/A" : "" + secc.getCutValue(); sec_score.addElement("score_cut").addText(strVal); // iterate over all items in this section context final List itemsc = secc.getSectionItemContexts(); for (final Iterator it_it = itemsc.iterator(); it_it.hasNext();) { final ItemContext itemc = (ItemContext) it_it.next(); final Element itres = secres.addElement("item_result"); itres.addAttribute("ident_ref", itemc.getIdent()); itres.addAttribute("asi_title", itemc.getEl_item().attributeValue("title")); final Element it_duration = itres.addElement("duration"); it_duration.addText(QTIHelper.getISODuration(itemc.getTimeSpent())); // process item score final DecimalVariable scoreVar = (DecimalVariable) (itemc.getVariables().getSCOREVariable()); final Element it_score = itres.addElement("outcomes").addElement("score"); it_score.addAttribute("varname", "SCORE"); it_score.addElement("score_value") .addText(StringHelper.formatFloat(scoreVar.getTruncatedValue(), 2)); strVal = scoreVar.hasMinValue() ? "" + scoreVar.getMinValue() : "0.0"; it_score.addElement("score_min").addText(strVal); strVal = scoreVar.hasMaxValue() ? "" + scoreVar.getMaxValue() : "N/A"; it_score.addElement("score_max").addText(strVal); strVal = scoreVar.hasCutValue() ? "" + scoreVar.getCutValue() : "N/A"; it_score.addElement("score_cut").addText(strVal); final Element el_item = itemc.getEl_item(); final Map res_responsehash = new HashMap(3); // iterate over all responses of this item final List resps = el_item.selectNodes( ".//response_lid|.//response_xy|.//response_str|.//response_num|.//response_grp"); for (final Iterator it_resp = resps.iterator(); it_resp.hasNext();) { final Element resp = (Element) it_resp.next(); final String ident = resp.attributeValue("ident"); final String rcardinality = resp.attributeValue("rcardinality"); final String rtiming = resp.attributeValue("rtiming"); // add new response final Element res_response = itres.addElement("response"); res_response.addAttribute("ident_ref", ident); res_responsehash.put(ident, res_response); // enable lookup of // @identref of <response> // (needed with <varequal> // elements // add new response_form // <response_lid ident="MR01" rcardinality="Multiple" rtiming="No"> final Element res_responseform = res_response.addElement("response_form"); res_responseform.addAttribute("cardinality", rcardinality); res_responseform.addAttribute("timing", rtiming); final String respName = resp.getName(); final String type = respName.substring(respName.indexOf("_") + 1); res_responseform.addAttribute("response_type", type); // add user answer final ItemInput itemInp = itemc.getItemInput(); final Translator trans = Util.createPackageTranslator(QTIModule.class, locale); if (itemInp == null) { // user did not answer this question at all res_response.addElement("response_value").addText(trans.translate("ResBuilder.NoAnswer")); } else { final List userAnswer = itemInp.getAsList(ident); if (userAnswer == null) { // user did not answer this question at // all res_response.addElement("response_value") .addText(trans.translate("ResBuilder.NoAnswer")); } else { // the user chose at least one option of an answer (did not // simply click send) for (final Iterator it_ans = userAnswer.iterator(); it_ans.hasNext();) { res_response.addElement("response_value").addText((String) it_ans.next()); } } } } /* * The simple element correct_response can only list correct elements, that is, no "or" or "and" elements may be in the conditionvar. Pragmatic solution: * if condition has ors or ands, then put whole conditionvar into <extension_response> (proprietary), and for easier cases (just "varequal" "not" * elements) use correct_response. */ final Map corr_answers = new HashMap(); // keys: respIdents, values: HashSet // of correct answers for this // respIdent final List respconds = el_item.selectNodes(".//respcondition"); for (final Iterator it_respc = respconds.iterator(); it_respc.hasNext();) { final Element el_respc = (Element) it_respc.next(); // check for add/set in setvar elements (check for single instance // only -> spec allows for multiple instances) final Element el_setvar = (Element) el_respc.selectSingleNode(".//setvar"); if (el_setvar == null) { continue; } if (el_setvar.attributeValue("action").equals("Add") || el_setvar.attributeValue("action").equals("Set")) { // This resrocessing gives points -> assume correct answer float numPoints = 0; try { numPoints = Float.parseFloat(el_setvar.getTextTrim()); } catch (final NumberFormatException nfe) { // } if (numPoints <= 0) { continue; } Element conditionvar = (Element) el_respc.selectSingleNode(".//conditionvar"); // there is an evaluation defined (a "resprocessing" element exists) // if (xpath(count(.//varequal) + count(.//not) = count(.//*)) is // true, then there are only "not" and "varequal" elements final XPath xCanHandle = DocumentHelper .createXPath("count(.//varequal) + count(.//not) = count(.//*)"); boolean canHandle = xCanHandle.matches(conditionvar); if (!canHandle) { // maybe we have <condvar> <and> <...>, try again final Element el_and = (Element) conditionvar.selectSingleNode("and"); if (el_and != null) { canHandle = xCanHandle.matches(el_and); if (canHandle) { // simultate the el_and to be the conditionvar conditionvar = el_and; } } else { // and finally, maybe we have an <or> element .. final Element el_or = (Element) conditionvar.selectSingleNode("or"); if (el_or != null) { canHandle = xCanHandle.matches(el_or); if (canHandle) { // simultate the el_and to be the conditionvar conditionvar = el_or; } } } } if (!canHandle) { // qti res 1.2.1 can't handle it final Element condcopy = conditionvar.createCopy(); itres.addElement("extension_item_result").add(condcopy); } else { /* * easy case: get all varequal directly under the conditionvar element and assume the "not" elements do not contain "not" elements again... * <!ELEMENT response (qti_comment? , response_form? , num_attempts? , response_value* , extension_response?)> <!ELEMENT response_form * (correct_response* , extension_responseform?)> <!ELEMENT correct_response (#PCDATA)> */ final List vareqs = conditionvar.selectNodes("./varequal"); for (final Iterator it_vareq = vareqs.iterator(); it_vareq.hasNext();) { /* * get the identifier of the response, so that we can attach the <correct_response> to the right <response> element quote: ims qti asi xml * binding :3.6.23.1 <varequal> Element: respident (required). The identifier of the corresponding <response_lid>, <response_xy>, etc. * element (this was assigned using its ident attribute). */ final Element vareq = (Element) it_vareq.next(); final String respIdent = vareq.attributeValue("respident"); Set respIdent_corr_answers = (Set) corr_answers.get(respIdent); if (respIdent_corr_answers == null) { respIdent_corr_answers = new HashSet(3); } respIdent_corr_answers.add(vareq.getText()); corr_answers.put(respIdent, respIdent_corr_answers); } // for varequal } // else varequal } // add/set setvar } // for resprocessing final Set resp_ids = corr_answers.keySet(); for (final Iterator idents = resp_ids.iterator(); idents.hasNext();) { final String respIdent = (String) idents.next(); final Set respIdent_corr_answers = (Set) corr_answers.get(respIdent); final Element res_response = (Element) res_responsehash.get(respIdent); final Element res_respform = res_response.element("response_form"); for (final Iterator iter = respIdent_corr_answers.iterator(); iter.hasNext();) { final String answer = (String) iter.next(); res_respform.addElement("correct_response").addText(answer); } } } // for response_xy } return res_doc; }
From source file:org.openadaptor.auxil.convertor.map.DocumentMapFacade.java
License:Open Source License
/** * Redone to use the namespace Map if there is one. * @param path/*from w ww. jav a2 s . c o m*/ * @return List Nodes referenced by this path */ protected List getNodes(String path) { if (nsMap == null) { return document.selectNodes(path); } else { // TODO Must be a way of setting the namespace once for the document. XPath xpath = DocumentHelper.createXPath(path); xpath.setNamespaceURIs(nsMap); return xpath.selectNodes(document); } }
From source file:org.openxml4j.opc.signature.RelationshipTransform.java
License:Apache License
@SuppressWarnings("unchecked") public static void SortRelationshipElementsById(Document doc) { HashMap map = new HashMap(); map.put("rel", PackageNamespaces.RELATIONSHIPS); XPath xpath = DocumentHelper.createXPath("//rel:" + PackageRelationship.RELATIONSHIP_TAG_NAME); xpath.setNamespaceURIs(map);/*from w w w.java 2 s. co m*/ XPath sortXpath = DocumentHelper.createXPath("@Id"); List<Element> sortedElements = xpath.selectNodes(doc, sortXpath); doc.getRootElement().setContent(sortedElements); }
From source file:org.tsp.bws.BWSDocument.java
License:Open Source License
/** * Prints the names and ids of all scripts found in the document. *//*from w w w. j a v a2 s. c om*/ public void getScriptNames() { XPath xpathSelector = DocumentHelper.createXPath("//script"); List results = xpathSelector.selectNodes(xmlDocument); Element curElement; Attribute tempAttribute; String tempString = new String(); for (Iterator elementIterator = results.iterator(); elementIterator.hasNext();) { curElement = (Element) elementIterator.next(); if (debug > 0) { System.out.println("Element found"); System.out.println(" Name: " + curElement.getName()); } try { tempAttribute = curElement.attribute("id"); tempString = tempAttribute.getValue(); } catch (Exception e) { try { tempAttribute = curElement.attribute("name"); tempString = tempAttribute.getValue(); } catch (Exception e2) { System.out.println("[Error] Script without id or name"); } } if (debug > 1) { System.out.println(" " + tempString); } scriptNames.addElement((Object) tempString); } }