Xpath - 找到以相同名称开头的节点 - 通过通配符或布尔操作?

时间:2018-03-15 16:46:23

标签: java xml xpath

如何找到以相同名称开头的Xpath节点?

例如,要查找以' rol '开头的所有节点::< rol1 >,< rol2 >和< rol3 >等等?

假设我有以下XML文件,

import React from 'react';

const data = [
  {
    "userId": 1,
    "id": 1,
    "title": "One",
    "body": "quia et suscipit\nsuscipit recusandae consequuntur expedita et cum\nreprehenderit molestiae ut ut quas totam\nnostrum rerum est autem sunt rem eveniet architecto"
  },
  {
    "userId": 1,
    "id": 2,
    "title": "Two",
    "body": "est rerum tempore vitae\nsequi sint nihil reprehenderit dolor beatae ea dolores neque\nfugiat blanditiis voluptate porro vel nihil molestiae ut reiciendis\nqui aperiam non debitis possimus qui neque nisi nulla"
  },
]
const dataTwo = [
  {
    "id": 1,
    "color": "red"
  },
  {
    "id": 2,
    "color": "blue"
  },
]
class App extends React.Component {

  render() {
    return (
      <div>
     {data.map((tweet)=> 
    <ul key={tweet.id}>
            <li>{tweet.title} <b>Color:</b> I want to put the color here</li>
     </ul>
     )}
      </div>
    );
  }
}
export default App;

我想找到节点&#34; rol1&#34;和&#34; rol2&#34;。实际上,XML文件中可能有6个角色。

问题1:如何通过带有通配符的XPath搜索来实现这一点,例如&#39; role *&#39;? Q2:与布尔运算符匹配&#34; role1&#34;和&#34;角色2&#34;? 问题3:当我使用XPath正则表达式查询单个结果并且没有角色*时,应该找不到任何内容或null。

在我发现的示例中,只有正则表达式用于使用属性进行搜索。

1 个答案:

答案 0 :(得分:3)

  

Q1:如何使用带有'role *'等通配符的XPath搜索?

要查找所有没有命名空间前缀的名称的元素,请以'role'开头,请使用以下表达式:

//*[starts-with(local-name(),'role')]
  

Q2:布尔运算符匹配“role1”和“role2”?

您可以使用XPath表达式的谓词中的布尔运算符来执行此操作。
(以下示例不会返回有用的结果,仅用于说明目的)

//*[starts-with(local-name(),'role1') and starts-with(local-name(),'role2')]
  

问题3:当我使用XPath正则表达式查询单个结果并且没有角色*时,应该找不到任何内容或null。

如果没有匹配项,则始终返回空节点集。