[b]近来,项目用到xml。所以引入了dom4j,来生成xml文档。但是我们经常需要在xml中有条件的查找某些结点,因此我们常用XPath提供的xml过滤规则表达式来满足我们的需求,现在将常用的规则表达式总结如下:[/b]
[table]
|/node|表示在xml文档的根目录查找结点名称为node的结点
|/node|表示在xml文档的根目录查找结点名称为node的结点
|./node|表示在当前结点下查找结点名称为node的结点
|//node|表示在xml文档中递归查找结点名称为node的节点
|//*|表示在xml文档中查询所有的结点,但是排除文本节点
|//node()|表示在xml文档中查询所有结点,包含文本节点
|//text()|表示在xml文档中递归查找所有的文本节点
|//*/text()[contains(., '测试')]|表示在xml文档中递归查找所有结点,条件为该结点的文本节点包含"测试"
|//node[@id]|表示在xml文档中递归查找结点名称为node的结点,条件为该结点必须含有id属性
|//node[id]|表示在xml文档中递归查找结点名称为node的结点,条件为该结点必须含有结点名称为id的结点
|//nodes[node/id]|表示递归查找nodes结点,条件为nodes结点下必须有node结点,且node结点下必须有id结点
|//nodes[@id]/node[id]|表示递归查找含有id属性的nodes结点下的node结点,条件为node结点下必须含有id结点
|//nodes[@id]/node[0]|表示递归查找含有id属性的nodes结点下的第一个node结点
|//nodes[@id]/node[last()]|表示递归查找含有id属性的nodes结点下的最后一个node结点
|//nodes/node[position() < 4]|表示递归查找nodes结点下索引小于4的node结点
|//nodes[@id]/node[position() < last()]|递归查找含有id属性的nodes结点下除最后一个结点外的node结点
|/nodes/child::node()[name()='node']|表示查找nodes结点下结点名称为node的子结点
|/nodes/child::node|等同于/nodes/node表示查找nodes下的node子结点
|/nodes/node/attribute::id|等同于/nodes/node/@id表示查找nodes结点下的node结点的id属性
|//nodes[@id='1001']/node[starts-with(@id, '1')]|表示查找id属性为1001的nodes结点下的id属性以1开头的node结点
|//@*[ends-with(., '1')]|表示查找以1结尾所有属性
|(//* 竖杠 //@*)[substring(name(), 1, 5) = 'class']|查找所有结点名称或属性名称的1到5之间的字符等于'class'的结点
|//node[@attr!='-2' and @attr!='2']|查找所有node节点,其attr属性不等于2和-2
[/table]
[b]最后一条中的汉字竖杠为|,|为javaeye的系统字符,我只能用汉字替代了。[/b]
[b]XPath 轴[/b]
[table]
|文档轴 |用途
|self |选择当前节点
|parent |选择当前节点的父节点
|child |选择当前节点的所有子节点
|attribute |选择当前节点的所有属性
|ancestor |选择当前节点的所有祖先,包括父节点、父节点的父节点等等
|ancestor-or-self |选择当前节点的祖先以及当前节点本身
|descendant |选择当前节点的所有后代,包括子节点、子节点的子节点等等
|descendant-or-self |选择当前节点的后代以及当前节点本身
|preceding |选择整个文档中出现在当前节点前面的所有节点
|preceding-sibling |选择文档中出现在当前节点前面的所有同胞节点(即与当前节点同级的节点)
|following |选择整个文档中出现在当前节点后面的所有节点
|following-sibling |选择文档中出现在当前节点后面的所有同胞节点(即与当前节点同级的节点)
|namespace |选择当前节点的所有名称空间节点
[/table]
[table]
|/node|表示在xml文档的根目录查找结点名称为node的结点
|/node|表示在xml文档的根目录查找结点名称为node的结点
|./node|表示在当前结点下查找结点名称为node的结点
|//node|表示在xml文档中递归查找结点名称为node的节点
|//*|表示在xml文档中查询所有的结点,但是排除文本节点
|//node()|表示在xml文档中查询所有结点,包含文本节点
|//text()|表示在xml文档中递归查找所有的文本节点
|//*/text()[contains(., '测试')]|表示在xml文档中递归查找所有结点,条件为该结点的文本节点包含"测试"
|//node[@id]|表示在xml文档中递归查找结点名称为node的结点,条件为该结点必须含有id属性
|//node[id]|表示在xml文档中递归查找结点名称为node的结点,条件为该结点必须含有结点名称为id的结点
|//nodes[node/id]|表示递归查找nodes结点,条件为nodes结点下必须有node结点,且node结点下必须有id结点
|//nodes[@id]/node[id]|表示递归查找含有id属性的nodes结点下的node结点,条件为node结点下必须含有id结点
|//nodes[@id]/node[0]|表示递归查找含有id属性的nodes结点下的第一个node结点
|//nodes[@id]/node[last()]|表示递归查找含有id属性的nodes结点下的最后一个node结点
|//nodes/node[position() < 4]|表示递归查找nodes结点下索引小于4的node结点
|//nodes[@id]/node[position() < last()]|递归查找含有id属性的nodes结点下除最后一个结点外的node结点
|/nodes/child::node()[name()='node']|表示查找nodes结点下结点名称为node的子结点
|/nodes/child::node|等同于/nodes/node表示查找nodes下的node子结点
|/nodes/node/attribute::id|等同于/nodes/node/@id表示查找nodes结点下的node结点的id属性
|//nodes[@id='1001']/node[starts-with(@id, '1')]|表示查找id属性为1001的nodes结点下的id属性以1开头的node结点
|//@*[ends-with(., '1')]|表示查找以1结尾所有属性
|(//* 竖杠 //@*)[substring(name(), 1, 5) = 'class']|查找所有结点名称或属性名称的1到5之间的字符等于'class'的结点
|//node[@attr!='-2' and @attr!='2']|查找所有node节点,其attr属性不等于2和-2
[/table]
[b]最后一条中的汉字竖杠为|,|为javaeye的系统字符,我只能用汉字替代了。[/b]
[b]XPath 轴[/b]
[table]
|文档轴 |用途
|self |选择当前节点
|parent |选择当前节点的父节点
|child |选择当前节点的所有子节点
|attribute |选择当前节点的所有属性
|ancestor |选择当前节点的所有祖先,包括父节点、父节点的父节点等等
|ancestor-or-self |选择当前节点的祖先以及当前节点本身
|descendant |选择当前节点的所有后代,包括子节点、子节点的子节点等等
|descendant-or-self |选择当前节点的后代以及当前节点本身
|preceding |选择整个文档中出现在当前节点前面的所有节点
|preceding-sibling |选择文档中出现在当前节点前面的所有同胞节点(即与当前节点同级的节点)
|following |选择整个文档中出现在当前节点后面的所有节点
|following-sibling |选择文档中出现在当前节点后面的所有同胞节点(即与当前节点同级的节点)
|namespace |选择当前节点的所有名称空间节点
[/table]