예제 #1
0
 @JRubyMethod(name = "node_set")
 public IRubyObject node_set(ThreadContext context) {
   try {
     NodeList nodes = (NodeList) xpath.evaluate(this.context, XPathConstants.NODESET);
     XmlNodeSet result = new XmlNodeSet(context.getRuntime(), nodes);
     //            result.relink_namespace(context);
     result.setInstanceVariable("@document", contextNode.document(context));
     return result;
   } catch (XPathExpressionException xpee) {
     throw new RaiseException(XmlSyntaxError.getXPathSyntaxError(context));
   }
 }
예제 #2
0
 private void removeNamespceRecursively(ThreadContext context, XmlNode xmlNode) {
   Node node = xmlNode.node;
   if (node.getNodeType() == Node.ELEMENT_NODE) {
     node.setPrefix(null);
     node.getOwnerDocument().renameNode(node, null, node.getLocalName());
   }
   XmlNodeSet nodeSet = (XmlNodeSet) xmlNode.children(context);
   for (long i = 0; i < nodeSet.length(); i++) {
     XmlNode childNode =
         (XmlNode) nodeSet.slice(context, RubyFixnum.newFixnum(context.getRuntime(), i));
     removeNamespceRecursively(context, childNode);
   }
 }
예제 #3
0
 @Override
 public void accept(ThreadContext context, SaveContextVisitor visitor) {
   visitor.enter((Element) node);
   XmlNodeSet xmlNodeSet = (XmlNodeSet) children(context);
   if (xmlNodeSet.length() > 0) {
     RubyArray array = (RubyArray) xmlNodeSet.to_a(context);
     for (int i = 0; i < array.getLength(); i++) {
       Object item = array.get(i);
       if (item instanceof XmlNode) {
         XmlNode cur = (XmlNode) item;
         cur.accept(context, visitor);
       } else if (item instanceof XmlNamespace) {
         XmlNamespace cur = (XmlNamespace) item;
         cur.accept(context, visitor);
       }
     }
   }
   visitor.leave((Element) node);
 }