package cn.java.demo.ibatis.internal;
import lombok.extern.slf4j.Slf4j;
import org.apache.ibatis.builder.xml.XMLMapperEntityResolver;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.parsing.XNode;
import org.apache.ibatis.parsing.XPathParser;
import java.io.IOException;
import java.io.InputStream;
import java.util.List;
import java.util.Properties;
/**
*/
@Slf4j
public class XPathParserTest {
public static void main(String[] args) throws IOException {
InputStream inputStream = Resources.getResourceAsStream("mybatis-config.xml");
XPathParser xPathParser = new XPathParser(inputStream, true, null, new XMLMapperEntityResolver());
XNode root = xPathParser.evalNode("/configuration");
// evalNodes
{
List<XNode> list = root.evalNodes("settings|properties");
if (list != null) {
list.forEach(item -> {
log.info("nodeName = {}", item.getName());
});
}
}
// evalNode/getChildrenAsProperties/getStringAttribute
{
{
XNode context = root.evalNode("settings");
Properties props = context.getChildrenAsProperties();
log.info("props = {}", props);
}
{
{
XNode context = root.evalNode("properties");
Properties defaults = context.getChildrenAsProperties();
String resource = context.getStringAttribute("resource");
log.info("defaults = {}, resource = {}", defaults, resource);
}
{
XNode context = root.evalNode("/configuration/properties");
Properties defaults = context.getChildrenAsProperties();
String resource = context.getStringAttribute("resource");
log.info("defaults = {}, resource = {}", defaults, resource);
}
}
{
XNode parent = root.evalNode("plugins");
if (parent != null) {
for (XNode child : parent.getChildren()) {
String interceptor = child.getStringAttribute("interceptor");
Properties properties = child.getChildrenAsProperties();
log.info("interceptor = {}, properties = {}", interceptor, properties);
}
}
}
}
}
}