2022年2022年静态分析工具PMD使用说明文档V. .pdf

上传人:Che****ry 文档编号:27258449 上传时间:2022-07-23 格式:PDF 页数:17 大小:408.96KB
返回 下载 相关 举报
2022年2022年静态分析工具PMD使用说明文档V. .pdf_第1页
第1页 / 共17页
2022年2022年静态分析工具PMD使用说明文档V. .pdf_第2页
第2页 / 共17页
点击查看更多>>
资源描述

《2022年2022年静态分析工具PMD使用说明文档V. .pdf》由会员分享,可在线阅读,更多相关《2022年2022年静态分析工具PMD使用说明文档V. .pdf(17页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、静态分析工具 PMD 使用说明中科软科技股份有限公司2008 年 12 月名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 1 页,共 17 页 - - - - - - - - - 目录目录. 21 前言 . 31.1 编写目的 . 31.2 修订历史 . 32 PMD 简介 . 43PMD 的安装与运行. 43.1 安装并从命令行运行PMD . 43.2 Eclipse中 PMD 插件的安装及使用. 53.3 使用 Ant 进行 PMD 调用 . 84 关于 PMD 规则 . 94.

2、1 PMD 缺省规则 . 94.2 PMD 推荐规则 . 10 4.3 PMD 规则自定义 . 10 4.4 注意事项 . 11 5PMD 规则编写 . 11 5.1 前提条件 . 11 5.2 PMD 实现原理 . 12 5.3 PMD 实现过程 . 12 5.4 JAVA代码编写规则 . 12 5.5 XPath 语言编写规则 . 12 6XPATH 基础 . 14 6.1 XPATH作用 . 14 6.2 XPATH数据类型 . 14 6.3 XML 文档结构 . 15 6.4 XPATH中节点匹配 . 15 7 参考资料 . 17 8附件 . 错误!未定义书签。附一中科软推荐规则集.

3、错误!未定义书签。附二PMD 规则集详细说明. 错误!未定义书签。名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 2 页,共 17 页 - - - - - - - - - 1前言1.1 编写目的质量是衡量一个软件是否成功的关键要素。而对于商业软件系统, 尤其是企业应用软件系统来说,除了软件运行质量、文档质量以外, 代码的质量也是非常重要的。软件开发进行到编码阶段的时候,最大的风险就在于如何保证代码的易读性和一致性,从而使得软件的维护的代价不会很高。在软件开发的过程中,以下几种情形随处

4、可见:软件维护时间长,而且维护人员的积极性不高新的开发人员融入团队的时间比较长提高代码的质量, 除了要提高逻辑上的控制以及业务流程的理解外,代码本身也存在提高的空间, 例如一些潜在的问题可以很早的就避免。类似于编码规范上的内容,如果全靠编码人员进行自行检查,那么无疑需要很大的工作量,如果可以使用代码的静态检查工具进行检查的话,那么将大大的提高编码的效率。项目组目前代码检查的工作基本上都是通过人工的方式,实行起来比较困难,检查的效果也不是很明显。PMD 正是这样一种工具,可以直接使用它自带的规则(当然也可以使用自己的规则)对Java 源程序进行分析找出程序存在的问题,可以很大程度上的减轻代码检查

5、工作的繁琐,为项目组今后的维护和开发工作起到指导的作用。本文主要介绍了如何使用pmd工具进行代码的自动化检查, 以规避一些潜在的问题并找出代码的逻辑错误。1.2 修订历史修订章节类型日期作者说明全部创建2008/12/ 刘吉才PMD 使用文档名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 3 页,共 17 页 - - - - - - - - - 2 PMD 简介PMD 是一种分析 Java 代码错误的开源工具。 与其他分析工具不同的是, PMD通过静态分析获知代码错误。也就是说,在不

6、运行Java 程序的情况下报告错误。PMD 附带了许多可以直接使用的规则,利用这些规则可以找出Java 源程序的许多问题,例如:潜在的 bug:确保资源 ( 像连接、声明和记录集 ) 在使用后总是关闭未使用的代码:未使用的局部变量、参数、私有方法等可选的代码: String/StringBuffer的滥用复杂的表达式:不必须的if语句, 可用 while 循环完成的 for 循环重复的代码:拷贝 / 粘贴代码意味着拷贝 / 粘贴 bugs 不优化的代码:避免在循环语句中初始化新对象(new 变量) 此外,用户还可以自己定义规则,检查Java 代码是否符合某些特定的编码规范。例如,你可以编写一个

7、规则, 要求 PMD 找出所有创建 Thread 和 Socket对象的操作。3 PMD 的安装与运行3.1 安装并从命令行运行PMD 你可以从 PMD 的网站下载 PMD 的二进制版本, 或下载带源代码的版本, 下载得到的都是 ZIP 文件。假设你下载了二进制版本, 先把它解压缩到任意一个目录。接下来怎么做,就要看你准备怎么用它最简单的,如果要在一个Java 源代码目录中运行 PMD ,只需直接在命令行上运行下面的命令:E:SoftWarepmd-bin-4.2.1pmd-4.2.1binjava -jar .libpmd-4.2.1.jar D:ebsser viceebsservices

8、rc text rulesets/unusedcode.xml输出结果类如下:D:ebsserviceebsservicesrccomsinosoftservicepolicyebsSMPolicyInput.java: 51 Avoid unused private fields such as logger. D:ebsserviceebsservicesrccomsinosoftservicepolicyebsSMPolicyShow.java:2 5 Avoid unused private fields such as logger. D:ebsserviceebsservicesr

9、ccomsinosoftservicepolicyebsSMQueryPolicyByPoli cyNo.java:32 Avoid unused local variables such as visaStatus. 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 4 页,共 17 页 - - - - - - - - - D:ebsserviceebsservicesrccomsinosoftservicepolicyebsSMQueryPolicyByPoli cyNo.java

10、:44 Avoid unused local variables such as temp. D:ebsserviceebsservicesrccomsinosoftservicepolicyebseriskESMPolicyInpu t.java:28 Avoid unused private fields such as logger. D:ebsserviceebsservicesrccomsinosoftservicepolicyebsjriskJSMPolicyInpu t.java:22 Avoid unused private fields such as logger一些可以加

11、载必须参数前面或者后面的可选参数如下:-debug: 打印 debug日志信息-targetjdk: 指定目标源代码的版本 - 1.3, 1.4, 1.5, 1.6 or 1.7;默认是 1.5 -cpus: 指定创建的线程数-encoding: 指定 PMD 检查的代码的编码方式-excludemarker: 指定 PMD 需要忽略的行的标记,默认为NOPMD -shortnames: 在报告中显示缩短的文件名-linkprefix: HTML源文件的路径,只是为了HTML 显示-lineprefix: 自定义的锚,用于影响源文件中的行,只是用于HTML 显示-minimumpriority

12、: 规则的优先级限制,低于优先级的规则将不被使用-nojava: 不检查 java 文件,默认是检查java 文件-jsp: 检查 JSP/JSF文件,默认不检查-reportfile: 将报告输出到文件,默认是打印在控制台-benchmark: 输出一个基准清单,默认输出到控制台-xslt: 覆盖默认的 xslt -auxclasspath: 指定源代码文件使用的类路径例如在 windows系统中,例子如下:c: java -jar pmd-4.2.1.jar c:mysourcecode text unusedcode,imports -targetjd k 1.5 -debug c: j

13、ava -jar pmd-4.2.1.jar c:mysourcecode xml basic,design -encoding UTF-8 c: java -jar pmd-4.2.1.jar c:mysourcecode html typeresolution -auxclasspath commons-collections.jar;derby.jar 3.2 Eclipse中 PMD 插件的安装及使用PMD 可以作为插件集成到很多流行的IDE 中,很多的插件中都包含了PMD 的jar文 件, 这 个 jar文 件 中 包 含 了 规 则 集 。 所 以 虽 然 一 些 插 件 中 使用

14、名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 5 页,共 17 页 - - - - - - - - - rulesets/unusedcode.xml来 作 为 参 数 引 用 规 则 集 , 但 是 实 际 上 是 使 用getResourceAsStream() 方法来从 PMD 的 jar 文件中加载。由于 Eclipse 是比较流行的开源Java/J2EE 开发 IDE,所以本文主要介绍如何在Eclipse中使用PMD工具进行代码的检查。并且选用的版本要求是Eclipse3

15、.3或者是 MyEclipse6.53.2.1 Eclipse中 PMD 插件的安装通过 Eclipse 更新来安装启动 Eclipse ,选择 Help-Software Updates-Find and Install, 选择 Next, 选择New remote site ,在 Name框 中 输入PMD ,URL 框中 输 入http:/ 在之后的对话框中一直点击下一步或者接受协议,完成 Eclipse 的 PMD 插件的安装, PMD 版本应该是 3.2.5 。本地安装下载最新的 zip 文件按,然后执行上述过程,只是使用New locale site来代替 New remote s

16、ite,并使用下载的 zip 文件。在安装完更新后,如果发生了一个异常, 例如” java.lang.RuntimeException: Could not find that class xxxx ”, 这 时 试 着 删 除workspace中的.metadata/plugins/net.sourceforge.pmd.eclipse目录下的 ruleset.xml文件。3.2.2 Eclipse中 PMD 插件的使用启动 Eclipse IDE,打开工程,选择 Windows-Preferences下的 PMD项,其中 Rules Configuration 项目可以配置PMD的检查规则

17、,自定义检查规则也可以在此通过Import 的方式导入到 PMD 中先清空其默认的所有规则(Clear all),然后导入规则集(Import rule set.),在下拉框中选择默认规则集或者点击Browse 选择自定义规则集) 如果用的是JDK1.5,点击Windows=Preferences=Java=Compiler=Errors/Warnings,设置Generic types 下面的三个选项的级别为ignore ( 避免推荐使用泛型,为兼容 JDK1.4做准备 ) 配 置 好 后 , 鼠 标 右 键 点 击 工 程 中 需 要 检 查 的JavaSource , 选 择PMD-Ch

18、eck Code With PMD , 之后 PMD就 会通 过规 则检 查你 的JavaSource 了并且将信息显示在PMD 自己的视图上名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 6 页,共 17 页 - - - - - - - - - publicclass RuleTest publicstaticvoid main(String args) try if (true) System.out .println(Hello World!); catch (Exceptio

19、n e) System.out .println(Hello); 代码检查的结果如下图所示:通过单击每一个出错信息,可以对触发规则的行进行定位。在控制台,我们可以对触发规则的代码数目进行统计,如下图所示:通过控制台右上角五个按钮可以控制显示出错信息的级别。实际开发中,我们选择第二个 Erroy 级别。生成报告名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 7 页,共 17 页 - - - - - - - - - 鼠标右键点击工程中需要检查的JavaSource,选择 PMD-Gene

20、rate reports,在当前工程的根目录下生成一个reports目录,该目录下存放了代码检查的结果报告, PMD 给我们提供了 csv,html ,txt,vb.html,xml五种格式供我们选择,根据报告,可以定位错误所处的包,所处的类,以及错误的级别,触发的规则集及规则,便于我们统计。3.3 使用 Ant 进行 PMD 调用下面是主要的 Ant 配置信息rulesets/favorites.xml用 Ant 命令运行 build.xml, PMD 就会按照你设定好的规则自动执行代码检查了。名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - -

21、- - - - 名师精心整理 - - - - - - - 第 8 页,共 17 页 - - - - - - - - - 4 关于 PMD 规则4.1 PMD 缺省规则运行所有的规则集中的规则会产生非常多的冲突,这些冲突中的很多是不重要的。在这么多的冲突中寻找你关心的部分结果就没有什么效率可言了。所以需要从明显的规则集,也就是说必须要改的地方开始是比较好的一个选择,例如只是运行unusedcode 检查,然后修改没有使用的局部变量和成员变量。然后运行基本的检查,修改所有的空语句,例如if语句等。最后可以执行与设计相关的或者存在一定争议的规则集,或者自定义的规则集。缺省规则集合:PMD 缺省规则P

22、MD 自带了很多规则集合,并且分类写入不同的 ruleset 文件,如Basic 包含每人都必须遵守的代码最佳实践,如EmptyCatchBlock Braces 关于条件分支的规则,如IfStmtsMustUseBraces Code Size 关于代码大小的规则,如方法的长度,参数的长度,属性的个数等Clone 克隆实现的规则,如是否有super.clone() Controversial 一些有争议的规则,如UnnecessaryConstructor不必要的构造器Coupling 对象连接有关的规则Design 可以检查有问题的设计,如SwitchStmtsShouldHaveDefa

23、ult Finalizers 使用finalizers时需遵循的规则,如FinalizeOnlyCallsSuperFinalize Import Statements 和 import有关的规则,如DuplicateImports重复import J2EE 唯一规则 UseProperClassLoader ,class.getClassLoader()可能不正确,用 Thread.currentThread().getContextClassLoader() 代替Javabeans 和javabean规范有关的规则,有BeanMembersShouldSerialize属性必须序列化和Mi

24、ssingSerialVersionUID缺少序列化 ID JUnit Tests 和 JUnit 测试有关的,如JUnitSpelling拼写检查等Logging (Jakarta) 使 用Jakarta Logger的 一 些 规 则 , 有UseCorrectExceptionLogging 异常处理不当和ProperLogger 是否正确定义 Logger 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 9 页,共 17 页 - - - - - - - - - Migrati

25、ng JDK 版本移植的规则,如ReplaceVectorWithList用 List代替 Vector Naming 和命名有关的规则,名称太短或太长,命名的约定等Optimizations 优化性能的一些规则, 如 LocalVariableCouldBeFinal本地变量如果只赋值一次,则应该声明为final Strict Exceptions 比较 严格的 异常 处 理方 针 ,如AvoidCatchingThrowable Strings 使 用String和StringBuffer时 应 遵 守 的 规 则 , 如StringToString Sun Security 编写安全的代

26、码,有 MethodReturnsInternalArray直接返回内部的数组, 更安全的做法是返回一个拷贝和ArrayIsStoredDirectly Unused Code 检查未使用的代码,如UnusedPrivateField未使用的私有属性Java Server Pages 编写 jsp 的一些方针,如NoLongScripts Java Server Faces 编写jsf的一些方针,有DontNestJsfInJstlIteration,在 Jsf 里使用 jstl的标签4.2 PMD 推荐规则由于缺省规则不完善及一部分规则有争议性,实际应用中我们采用的是经过我们公司调整过的规则

27、集。使用说明:清空PMD 缺省规则集,直接导入推荐规则集即可。规则说明均标注在PMD 规则说明里面。PMD 规则说明里面是关于规则集及规则的详细说明,其中包括我们中科软自定义规则,实际应用中可以根据错误提示到文档里面查找详细的说明及实例代码。4.3 PMD 规则自定义PMD 自带了很多代码规范的规则,还可以自定义规则,我们可以把这些规则整合到一起,最后,我们运行PMD 的时候就可以指定这个 ruleset 文件。按照我们的需求进行代码检查。2名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - -

28、 第 10 页,共 17 页 - - - - - - - - - PMD 里面有个写好的ruleset文件,在 pmd-3.8.jar里面的 rulesets文件夹下,名称是 favorites.xml,以下是主要部分: 2 4.4 注意事项可以使用 JDK1.5 的声明 SuppressWarnings() ,禁止 PMD 的警告。可以使用 /NOPMD 来标记行或块代码,禁止PMD 警告。有两种方法自定义Rule,编写 java 类和编写 XPath 5 PMD 规则编写5.1 前提条件有两个办法来编写自定义规则, 可以编写 java 类和编写 XPath, 编写 java名师资料总结 -

29、 - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 11 页,共 17 页 - - - - - - - - - 类的一般步骤是,先确定要查找的代码形式,利用PMD 自带的 designer.bat工 具 查 看AST( 抽 象 语 法 树 ), 然 后 编 写 规 则 类 ( 继 承net.sourceforge.pmd.AbstractRule) ,然后编写一个 ruleset的 XML 文件,最后就可以运行PMD 进行检查。编写 XPath 比编写 java 类要容易些, 但也需要掌握 AST的含义

30、,利用 designer.bat工具可以查看 AST ,比如/ClassBody count(/VariableDeclarator./Type/NameImage=Logger)1这个表达式就是查找类的代码里是否声明了多个 Logger ,然后编写一个 ruleset 的 XML 文件,最后运行 PMD 进行检查。编写 PMD 规则要了解 Xpath:http:/www.w3.org/TR/xpath,并对 PMD 的实现原理有一定的了解5.2 PMD 实现原理Pmd 利用 javacc 和 EBNF 文法产生一个分析器,用来分析 java 源代码 (文本) 。 又在 JavaCC的基础上加

31、入了语义的概念也就是JJTree, 这样就把 java source 转换成了一个抽象语法树 (AST ) , AST是一个结构化的对象层次结构。我们可以用访问者模式访问这个结构上的每个节点。从而找出哪个节点违反了哪些规则。5.3 PMD 实现过程首先传一个文件名或者Ruleset 给 pmd,Pmd 把该文件流传给自己生成的javaCC 分析器分析完毕后, pmd获得了分析生成的AST的一个引用 .PMD把AST处理成一个符号表, 你可以在符号表里面查询一些有用的信息,每个 pmd规则都会遍历整个 AST并检验是否发生了错误,接着pmd产生一个报表,上面说明了有哪些地方违反了pmd规则。5.

32、4 JAVA代码编写规则用 java code,需要了解 pmd的 api ,需要进行深入研究,也常常用于一些比较复杂的 pmd规则5.5 XPath 语言编写规则用 xpath ,对着产生的AST树,写就行了,上手比较快,写起来也比较简单,下面举一个例子:在项目中,我们不希望Application的开发人员手动的调用Toplink UnitOfWork的 commit,commitAndResume, commitAndResumeOnFailure 方名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - -

33、- - - - 第 12 页,共 17 页 - - - - - - - - - 法,因为每次提交都会映像performa ,我们的提交是放在自己编写的framework 里面,在指定的位置提交。 所以我们把规则的优先级设置为3. 在eclipse的 pmd plugin 中,优先级为 3 会产生一个警告。首先将 D:local_libpmd-bin-4.2bin 加到系统环境变量的path 中打开 cmd 运行 designer 分析器左上角 source code 可以把你写好的 java source 拷贝过来主要就在这个 java source code基础上不断修正你的pmd规则xpa

34、th query :用来编写自定义的xpath expression(先不忙写xpath expression )点击 go,就会在左下角的Abstract syntax Tree中产生 AST ,你可以选择 AST上的某个节点,左下角的下面一个框中就会出现该节点的一些信息,是在符号表中查询得到的DFA是 pmd4的新功能,用于编写更复杂的pmd规则,不光是某个 source code 级别了, pmd4使用了 asm读取字节码,并作分析,处理类文件之间的依赖性。在实际使用中,特别是在特定应用中,这个功能是相当有用的。还可以用来简化一些现有的规则根据生成的 AST编写 xpath expres

35、sion。对于上文提到的source 检查规则编写了一个xpath Expression,在编写 xpath expression的过程中需要反复的修改源代码并且反复的修改xpath expression这样才能满足所有的需要,反复的点击go 最后写好的规则大致如下:/PrimaryExpression(PrimaryPrefix/Nameends-with(Image,commit) or ends-with(Image, commitAndResume) or ends-with(Image, commitAndResumeOnFailure) and substring-before(P

36、rimaryPrefix/Name/Image, .) = /VariableDeclaratorId././ClassOrInterfaceTypeImage = UnitOfWork/Image) or (PrimarySuffixends-with(Image, commit) or ends-with(Image,commitAndResume) or ends-with(Image, commitAndResumeOnFailure) and (PrimarySuffixends-with(Image, getActiveUnitOfWork) or PrimarySuffixend

37、s-with(Image, acquireUnitOfWork) and /ImportDeclaration/Namecontains(Image,oracle.toplink.sessions.UnitOfWork) or contains(Image, oracle.toplink.sessions) 将写好的 xpath expression 转换成 pmd rule 。Designer 可以自动生成点击菜单 actions下面的 create rule xml 最后将生成的 rule 添加到 ruleset中,并在大批量的代码中进行验证。名师资料总结 - - -精品资料欢迎下载 -

38、- - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 13 页,共 17 页 - - - - - - - - - 6 XPATH 基础6.1 XPATH作用引入 XPath 的概念,目的就是为了在匹配XML文档结构树时能够准确地找到某一个节点元素。可以把XPath比作文件管理路径:通过文件管理路径,可以按照一定的规则查找到所需要的文件;同样,.PMD将我们的 JAVA源文件构造成一棵语法树(AST ) ,依据 XPath 所制定的规则, 也可以很方便地找到语法树中的任何一个节点6.2 XPATH数据类型XPath 可分为四种数据类型:

39、1.节点集( node-set)节点集是通过路径匹配返回的符合条件的一组节点的集合。其它类型的数据不能转换为节点集。2.布尔值 (boolean)由函数或布尔表达式返回的条件匹配值,与一般语言中的布尔值相同,有true 和 false 两个值。布尔值可以和数值类型、字符串类型相互转换。3.字符串 (string)字符串即包含一系列字符的集合,XPath 中提供了一系列的字符串函数。字符串可与数值类型、布尔值类型的数据相互转换。4.数值 (number)在 XPath 中数值为浮点数,可以是双精度64 位浮点数。 另外包括一些数值的特殊描述,如非数值NaN(Not-a-Number )、正无穷大

40、infinity 、负无穷大 -infinity 、正负0 等等。 number 的整数值可以通过函数取得,另外,数值也可以和布尔类型、字符串类型相互转换。名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 14 页,共 17 页 - - - - - - - - - 6.3 XML 文档结构1.根节点( Root Node )根节点是一棵树的最上层,根节点是唯一的。树上其它所有元素节点都是它的子节点或后代节点。对根节点的处理机制与其它节点相同。2.元素节点( Element Nodes

41、)元素节点对应于文档中的每一个元素,一个元素节点的子节点可以是元素节点、注释节点、处理指令节点和文本节点。可以为元素节点定义一个唯一的标识id。3.文本节点( Text Nodes )文本节点包含了一组字符数据,即 CDATA 中包含的字符。 任何一个文本节点都不会有紧邻的兄弟文本节点,而且文本节点没有扩展名。4.属性节点( Attribute Nodes )每一个元素节点有一个相关联的属性节点集合,元素是每个属性节点的父节点,但属性节点却不是其父元素的子节点。5.命名空间节点(Namespace Nodes )每一个元素节点都有一个相关的命名空间节点集。在XML 文档中,命名空间是通过保留属

42、性声明的,因此,在XPath 中,该类节点与属性节点极为相似,它们与父元素之间的关系是单向的,并且不具有共享性。6.处理指令节点(Processing Instruction Nodes )处理指令节点对应于XML 文档中的每一条处理指令。它也有扩展名,扩展名的本地命名指向处理对象,而命名空间部分为空。7.注释节点( Comment Nodes )注释节点对应于文档中的注释。6.4 XPATH中节点匹配先构造一棵XML 文档树名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 15 页,

43、共 17 页 - - - - - - - - - 节点匹配匹配方法含义匹配结果/A/C/D指示节点路径节点A的子节点 C的子节点 D /E所有路径以 / 后指定的子路径结尾的元素所有 E 元素,结果是所有三个E元素/*/*/D路径的通配符上面有两级节点的 D 元素,匹配结果是 id 值为 d2 的 D 元素/B | /C逻辑或所有 B 元素和 C元素/A/B/C1A 元素B 元素C 元素的第一个子元素name 值为 b 的 B 元素/Bid所有具有属性 id 的 B元素id 值为 b1 和 b2 的两个 B元素/A/child:*A 的子元素id 值为 b1、b2 的 B元素,id 值为c2的

44、 C元素,以及没有任何属性的 E元素名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 16 页,共 17 页 - - - - - - - - - 7 参考资料PMD 官方文档( http:/ Copeland在“ Static Analysis with PMD”中对 PMD 进行了介绍( http:/ tml?page=1 ), 在 他 的 另 一 篇 文 章 “ Custom PMD Rules ”( http:/ 规则XOM 是一个开源的、基于树的 API ,用于处理 Java 中的 XML ,其网站:http:/ XPath 语法: (http:/www.w3.org/TR/xpath)名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 17 页,共 17 页 - - - - - - - - -

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 高考资料

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁