这篇文章主要是为了写Mybatis源码解析配置文件xml所需的背景知识,表达式部分的文档https:www。w3。orgTR1999RECxpath19991116JAVAJSR206:JavaAPIforXMLProcessing(JAXP)1。3https:docs。oracle。comcdE1780201webserviceswebservicesdocs2。0jaxpReleaseNotes。htmlmigrationFrom13 先看下这个是xml文件,然后看这个文档如何解析lt;?xmlversion1。0encodingUTF8?!DOCTYPEmapperPUBLICmybatis。orgDTDMapper3。0ENhttp:mybatis。orgdtdmybatis3mapper。dtdmappernamespaceorg。apache。ibatis。begincode。MapperinsertidinsertUserinsertintousers(id,name)values({id},{name})insertinsertidinsertUser2insertintousers(id,name)values({id},{name})insertselectidselectUserresultTypeorg。apache。ibatis。begincode。Userselectfromusersselectmapper 读文件的demoCopyright20092022theoriginalauthororauthors。pLicensedundertheApacheLicense,Version2。0(theLicense);youmaynotusethisfileexceptincompliancewiththeLicense。YoumayobtainacopyoftheLicenseatphttp:www。apache。orglicensesLICENSE2。0pUnlessrequiredbyapplicablelaworagreedtoinwriting,softwaredistributedundertheLicenseisdistributedonanASISBASIS,WITHOUTWARRANTIESORCONDITIONSOFANYKIND,eitherexpressorimplied。SeetheLicenseforthespecificlanguagegoverningpermissionsandlimitationsundertheLicense。packageorg。apache。ibatis。begincode;importorg。apache。ibatis。parsing。XPathParser;importorg。junit。jupiter。api。Test;importorg。w3c。dom。Document;importorg。w3c。dom。Node;importorg。w3c。dom。NodeList;importorg。xml。sax。EntityResolver;importorg。xml。sax。SAXException;importjavax。xml。parsers。DocumentBuilder;importjavax。xml。parsers。DocumentBuilderFactory;importjavax。xml。parsers。ParserConfigurationException;importjavax。xml。xpath。XPath;importjavax。xml。xpath。XPathConstants;importjavax。xml。xpath。XPathExpressionException;importjavax。xml。xpath。XPathFactory;importjava。io。File;importjava。io。FileInputStream;importjava。io。IOException;publicclassXMLTest{https:www。w3。orgTR1999RECxpath19991116TestpublicvoidresolveXml()throwsParserConfigurationException,IOException,SAXException,XPathExpressionException{StringfileNameMapper。xml;StringxmlFilePaththis。getClass()。getResource()。getPath()fileName;DocumentBuilderFactorydocumentBuilderFactoryDocumentBuilderFactory。newInstance();documentBuilderFactory。setValidating(false);DocumentBuilderdbdocumentBuilderFactory。newDocumentBuilder();Documentdocdb。parse(newFileInputStream(newFile(xmlFilePath)));XPathFactoryfactoryXPathFactory。newInstance();XPathxpathfactory。newXPath();Stringexpression;Nodenode;NodeListnodeList;1。根目录expression;node(Node)xpath。evaluate(expression,doc,XPathConstants。NODE);System。out。println(1。node。getNodeName());2。根据标签名获取根目录expressionmapper;node(Node)xpath。evaluate(expression,doc,XPathConstants。NODE);System。out。println(2。node。getNodeName());3。根据标签层级获取节点expressionmapperselect;node(Node)xpath。evaluate(expression,doc,XPathConstants。NODE);System。out。println(3。node。getNodeName());4。获取标签下所有节点expressionmapper;nodeList(NodeList)xpath。evaluate(expression,doc,XPathConstants。NODESET);System。out。print(4。);for(inti0;inodeList。getLength();i){System。out。print(nodeList。item(i)。getNodeName());}System。out。println();5。获取所有指定节点expressioninsert;nodeList(NodeList)xpath。evaluate(expression,doc,XPathConstants。NODESET);System。out。print(5。);for(inti0;inodeList。getLength();i){System。out。print(nodeList。item(i)。getNodeName());}System。out。println();6。获取所有非指定名字节点expression〔name()!insert〕;nodeList(NodeList)xpath。evaluate(expression,doc,XPathConstants。NODESET);System。out。print(6。);for(inti0;inodeList。getLength();i){System。out。print(nodeList。item(i)。getNodeName());}System。out。println();7。获取至少有一个子节点的节点expression〔〕;nodeList(NodeList)xpath。evaluate(expression,doc,XPathConstants。NODESET);System。out。print(7。);for(inti0;inodeList。getLength();i){System。out。print(nodeList。item(i)。getNodeName());}System。out。println();8。获取指定层级的节点expression;nodeList(NodeList)xpath。evaluate(expression,doc,XPathConstants。NODESET);System。out。print(8。);for(inti0;inodeList。getLength();i){System。out。print(nodeList。item(i)。getNodeName());System。out。print(nodeList。item(i)。getFirstChild()。getNodeValue());}System。out。println();}} 执行结果 代码执行结果 其他使用方法,直接用Document处理TestpublicvoiddocumentTest()throwsParserConfigurationException,IOException,SAXException{StringfileNameMapper。xml;StringxmlFilePaththis。getClass()。getResource()。getPath()fileName;DocumentBuilderFactorydocbuilderFactoryDocumentBuilderFactory。newInstance();DocumentBuilderdombuilderdocbuilderFactory。newDocumentBuilder();InputStreamisnewFileInputStream(xmlFilePath);Documentdocdombuilder。parse(is);Elementrootdoc。getDocumentElement();System。out。println(root。getChildNodes()。item(1)。getFirstChild()。getNodeValue());}