in src/main/java/org/apache/commons/jxpath/ri/model/dom/DOMNodePointer.java [271:330]
public String asPath() {
if (id != null) {
return "id('" + escape(id) + "')";
}
final StringBuilder buffer = new StringBuilder();
if (parent != null) {
buffer.append(parent.asPath());
}
switch (node.getNodeType()) {
case Node.ELEMENT_NODE:
// If the parent pointer is not a DOMNodePointer, it is
// the parent's responsibility to produce the node test part
// of the path
if (parent instanceof DOMNodePointer) {
if (buffer.length() == 0 || buffer.charAt(buffer.length() - 1) != '/') {
buffer.append('/');
}
final String ln = getLocalName(node);
final String nsURI = getNamespaceURI();
if (nsURI == null) {
buffer.append(ln);
buffer.append('[');
buffer.append(getRelativePositionByQName()).append(']');
} else {
final String prefix = getNamespaceResolver().getPrefix(nsURI);
if (prefix != null) {
buffer.append(prefix);
buffer.append(':');
buffer.append(ln);
buffer.append('[');
buffer.append(getRelativePositionByQName());
} else {
buffer.append("node()");
buffer.append('[');
buffer.append(getRelativePositionOfElement());
}
buffer.append(']');
}
}
break;
case Node.TEXT_NODE:
case Node.CDATA_SECTION_NODE:
buffer.append("/text()");
buffer.append('[');
buffer.append(getRelativePositionOfTextNode()).append(']');
break;
case Node.PROCESSING_INSTRUCTION_NODE:
buffer.append("/processing-instruction(\'");
buffer.append(((ProcessingInstruction) node).getTarget()).append("')");
buffer.append('[');
buffer.append(getRelativePositionOfPI()).append(']');
break;
case Node.DOCUMENT_NODE:
// That'll be empty
break;
default:
break;
}
return buffer.toString();
}