Java Code Examples for org.apache.xpath.objects.XObject#CLASS_NODESET

The following examples show how to use org.apache.xpath.objects.XObject#CLASS_NODESET . You can vote up the ones you like or vote down the ones you don't like, and go to the original project or source file by following the links above each example. You may check out the related API usage on the sidebar.
Example 1
Source File: XalanXPathExecuter.java    From jasperreports with GNU Lesser General Public License v3.0 5 votes vote down vote up
@Override
public Object selectObject(Node contextNode, String expression) throws JRException {
	try {
		Object value;
		XObject object = xpathAPI.eval(contextNode, expression);
		switch (object.getType()) {
			case XObject.CLASS_NODESET:
				value = object.nodeset().nextNode();
				break;
			case XObject.CLASS_BOOLEAN:
				value = object.bool();
				break;
			case XObject.CLASS_NUMBER:
				value = object.num();
				break;
			default:
				value = object.str();
				break;
		}
		return value;
	} catch (TransformerException e) {
		throw 
			new JRException(
				EXCEPTION_MESSAGE_KEY_XPATH_SELECTION_FAILURE,
				new Object[]{expression},
				e);
	}
}
 
Example 2
Source File: XalanNsAwareXPathExecuter.java    From jasperreports with GNU Lesser General Public License v3.0 5 votes vote down vote up
@Override
public Object selectObject(Node contextNode, String expression)
		throws JRException {
	try {
		createNamespaceElement(contextNode, expression);
		Object value;
		XObject object = null; 
		if (namespaceElement != null) {	
			object = xpathAPI.eval(contextNode, expression, namespaceElement);
		} else {
			object = xpathAPI.eval(contextNode, expression);
		}
		switch (object.getType()) {
		case XObject.CLASS_NODESET:
			value = object.nodeset().nextNode();
			break;
		case XObject.CLASS_BOOLEAN:
			value = object.bool();
			break;
		case XObject.CLASS_NUMBER:
			value = object.num();
			break;
		default:
			value = object.str();
			break;
		}
		return value;
	} catch (TransformerException e) {
		throw 
			new JRException(
				EXCEPTION_MESSAGE_KEY_XPATH_SELECTION_FAILURE,
				new Object[]{expression},
				e);
	}
}
 
Example 3
Source File: ElemCopyOf.java    From j2objc with Apache License 2.0 4 votes vote down vote up
/**
 * The xsl:copy-of element can be used to insert a result tree
 * fragment into the result tree, without first converting it to
 * a string as xsl:value-of does (see [7.6.1 Generating Text with
 * xsl:value-of]).
 *
 * @param transformer non-null reference to the the current transform-time state.
 *
 * @throws TransformerException
 */
public void execute(
        TransformerImpl transformer)
          throws TransformerException
{
  try
  {
    XPathContext xctxt = transformer.getXPathContext();
    int sourceNode = xctxt.getCurrentNode();
    XObject value = m_selectExpression.execute(xctxt, sourceNode, this);

    SerializationHandler handler = transformer.getSerializationHandler();

    if (null != value)
                      {
      int type = value.getType();
      String s;

      switch (type)
      {
      case XObject.CLASS_BOOLEAN :
      case XObject.CLASS_NUMBER :
      case XObject.CLASS_STRING :
        s = value.str();

        handler.characters(s.toCharArray(), 0, s.length());
        break;
      case XObject.CLASS_NODESET :

        // System.out.println(value);
        DTMIterator nl = value.iter();

        // Copy the tree.
        DTMTreeWalker tw = new TreeWalker2Result(transformer, handler);
        int pos;

        while (DTM.NULL != (pos = nl.nextNode()))
        {
          DTM dtm = xctxt.getDTMManager().getDTM(pos);
          short t = dtm.getNodeType(pos);

          // If we just copy the whole document, a startDoc and endDoc get 
          // generated, so we need to only walk the child nodes.
          if (t == DTM.DOCUMENT_NODE)
          {
            for (int child = dtm.getFirstChild(pos); child != DTM.NULL;
                 child = dtm.getNextSibling(child))
            {
              tw.traverse(child);
            }
          }
          else if (t == DTM.ATTRIBUTE_NODE)
          {
            SerializerUtils.addAttribute(handler, pos);
          }
          else
          {
            tw.traverse(pos);
          }
        }
        // nl.detach();
        break;
      case XObject.CLASS_RTREEFRAG :
        SerializerUtils.outputResultTreeFragment(
          handler, value, transformer.getXPathContext());
        break;
      default :
        
        s = value.str();

        handler.characters(s.toCharArray(), 0, s.length());
        break;
      }
    }
                      
    // I don't think we want this.  -sb
    //  if (transformer.getDebug())
    //  transformer.getTraceManager().fireSelectedEvent(sourceNode, this,
    //  "endSelect", m_selectExpression, value);

  }
  catch(org.xml.sax.SAXException se)
  {
    throw new TransformerException(se);
  }

}
 
Example 4
Source File: NodeSorter.java    From j2objc with Apache License 2.0 4 votes vote down vote up
/**
 * Constructor NodeCompareElem
 *
 *
 * @param node Current node
 *
 * @throws javax.xml.transform.TransformerException
 */
NodeCompareElem(int node) throws javax.xml.transform.TransformerException
{
  m_node = node;

  if (!m_keys.isEmpty())
  {
    NodeSortKey k1 = (NodeSortKey) m_keys.elementAt(0);
    XObject r = k1.m_selectPat.execute(m_execContext, node,
                                       k1.m_namespaceContext);

    double d;

    if (k1.m_treatAsNumbers)
    {
      d = r.num();

      // Can't use NaN for compare. They are never equal. Use zero instead.  
      m_key1Value = new Double(d);
    }
    else
    {
      m_key1Value = k1.m_col.getCollationKey(r.str());
    }

    if (r.getType() == XObject.CLASS_NODESET)
    {
      // %REVIEW%
      DTMIterator ni = ((XNodeSet)r).iterRaw();
      int current = ni.getCurrentNode();
      if(DTM.NULL == current)
        current = ni.nextNode();

      // if (ni instanceof ContextNodeList) // %REVIEW%
      // tryNextKey = (DTM.NULL != current);

      // else abdicate... should never happen, but... -sb
    }

    if (m_keys.size() > 1)
    {
      NodeSortKey k2 = (NodeSortKey) m_keys.elementAt(1);

      XObject r2 = k2.m_selectPat.execute(m_execContext, node,
                                          k2.m_namespaceContext);

      if (k2.m_treatAsNumbers) {
        d = r2.num();
        m_key2Value = new Double(d);
      } else {
        m_key2Value = k2.m_col.getCollationKey(r2.str());
      }
    }

    /* Leave this in case we decide to use an array later
    while (kIndex <= m_keys.size() && kIndex < maxkey)
    {
      NodeSortKey k = (NodeSortKey)m_keys.elementAt(kIndex);
      XObject r = k.m_selectPat.execute(m_execContext, node, k.m_namespaceContext);
      if(k.m_treatAsNumbers)
        m_KeyValue[kIndex] = r.num();
      else
        m_KeyValue[kIndex] = r.str();
    } */
  }  // end if not empty    
}