import java.io.ByteArrayInputStream ;
import javax.xml.parsers.DocumentBuilderFactory ;
import org.w3c.dom.Document ;
import org.w3c.dom.Element ;
import org.w3c.dom.Node ;
import javax.xml.xpath.* ;
public class Main{
public static void main
( String [ ] args
) { try
{
Document document
= DocumentBuilderFactory.
newInstance ( ) .
newDocumentBuilder ( ) .
parse ( ( "<foo><foo1>Foo Test 1</foo1><foo2><another1><test1>Foo Test 2</test1></another1></foo2><foo3>Foo Test 3</foo3><foo4>Foo Test 4</foo4></foo>" ) .getBytes ( )
)
) ;
String xpath
= getXPath
( document,
"another1" ) ;
}
{
e.printStackTrace ( ) ;
}
}
{
XPathExpression expr = XPathFactory.newInstance ( ) .newXPath ( ) .compile ( "//" + elementName) ;
Node node = ( Node) expr.evaluate ( root, XPathConstants.NODE ) ;
if ( node != null ) {
return getXPath( node) ;
}
return null ;
}
private static String getXPath
( Node node
) { if ( node == null || node.getNodeType ( ) != Node.ELEMENT_NODE ) {
return "" ;
}
return getXPath( node.getParentNode ( ) ) + "/" + node.getNodeName ( ) ;
}
}
aW1wb3J0IGphdmEuaW8uQnl0ZUFycmF5SW5wdXRTdHJlYW07CmltcG9ydCBqYXZheC54bWwucGFyc2Vycy5Eb2N1bWVudEJ1aWxkZXJGYWN0b3J5OwppbXBvcnQgb3JnLnczYy5kb20uRG9jdW1lbnQ7CmltcG9ydCBvcmcudzNjLmRvbS5FbGVtZW50OwppbXBvcnQgb3JnLnczYy5kb20uTm9kZTsKaW1wb3J0IGphdmF4LnhtbC54cGF0aC4qOwoKcHVibGljIGNsYXNzIE1haW57CgpwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CiAgICB0cnkgCiAgICB7CiAgICAgIERvY3VtZW50IGRvY3VtZW50ID0gRG9jdW1lbnRCdWlsZGVyRmFjdG9yeS5uZXdJbnN0YW5jZSgpLm5ld0RvY3VtZW50QnVpbGRlcigpLnBhcnNlKAogICAgICAgIG5ldyBCeXRlQXJyYXlJbnB1dFN0cmVhbSgKICAgICAgICAgICgiPGZvbz48Zm9vMT5Gb28gVGVzdCAxPC9mb28xPjxmb28yPjxhbm90aGVyMT48dGVzdDE+Rm9vIFRlc3QgMjwvdGVzdDE+PC9hbm90aGVyMT48L2ZvbzI+PGZvbzM+Rm9vIFRlc3QgMzwvZm9vMz48Zm9vND5Gb28gVGVzdCA0PC9mb280PjwvZm9vPiIpLmdldEJ5dGVzKCkKICAgICAgICApCiAgICAgICk7CgogICAgICBTdHJpbmcgeHBhdGggPSBnZXRYUGF0aChkb2N1bWVudCwgImFub3RoZXIxIik7CiAgICAgIFN5c3RlbS5vdXQucHJpbnRsbih4cGF0aCk7ICAgICAgICAKCiAgICB9CiAgICBjYXRjaCAoRXhjZXB0aW9uIGUpIAogICAgewogICAgICBlLnByaW50U3RhY2tUcmFjZSgpOwogICAgfQogICAgCiAgICAKfQoKcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIGdldFhQYXRoKERvY3VtZW50IHJvb3QsIFN0cmluZyBlbGVtZW50TmFtZSkgdGhyb3dzIFhQYXRoRXhwcmVzc2lvbkV4Y2VwdGlvbiAKewogIFhQYXRoRXhwcmVzc2lvbiBleHByID0gWFBhdGhGYWN0b3J5Lm5ld0luc3RhbmNlKCkubmV3WFBhdGgoKS5jb21waWxlKCIvLyIgKyBlbGVtZW50TmFtZSk7CiAgTm9kZSBub2RlID0gKE5vZGUpZXhwci5ldmFsdWF0ZShyb290LCBYUGF0aENvbnN0YW50cy5OT0RFKTsKCiAgaWYobm9kZSAhPSBudWxsKSB7CiAgICAgIHJldHVybiBnZXRYUGF0aChub2RlKTsKICB9CgogIHJldHVybiBudWxsOwp9Cgpwcml2YXRlIHN0YXRpYyBTdHJpbmcgZ2V0WFBhdGgoTm9kZSBub2RlKSB7CiAgICBpZihub2RlID09IG51bGwgfHwgbm9kZS5nZXROb2RlVHlwZSgpICE9IE5vZGUuRUxFTUVOVF9OT0RFKSB7CiAgICAgICAgcmV0dXJuICIiOwogICAgfQoKICAgIHJldHVybiBnZXRYUGF0aChub2RlLmdldFBhcmVudE5vZGUoKSkgKyAiLyIgKyBub2RlLmdldE5vZGVOYW1lKCk7Cn0KCn0=