@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)); } }
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); } }
@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); }