34512
以下のような `dummy-pom.xml` ファイルを用意しました。

```

    <?xml version="1.0"?>
    <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
      <modelVersion>4.0.0</modelVersion>
      <groupId>dummy</groupId>
      <version>0.0.1-SNAPSHOT</version>
      <artifactId>dummy-pom</artifactId>
      <packaging>pom</packaging>
    </project>
    
```

この状態から、 xmllint で、 xpath によって要素を取得しようとしたのですが、正しく動作してくれません。

```

    $ xmllint --xpath '/project' dummy-pom.xml
    XPath set is empty
    
```

これは、xpath の指定が間違っているのだと考えられますが、どう間違っているのかがわからずにいます。

### 質問:

上記ファイルに対して xpath で要素を取得できないのはなぜでしょうか？
CC BY-SA 3.0
2017-05-07T08:05:22.977
34510
2017-05-07T09:20:27.523
2017-05-07T08:14:13.960
754
754
question
xml xpath
maven の pom.xml に対して xmllint の xpath で要素を拾うことができない
既定の`xmlns`が指定されているので名前空間を指定しない`project`ではマッチしないと思われます。ローカル名で

```

    /*[local-name()='project']
    
```

と判定するか、XMLに`xmlns:hoge="http://maven.apache.org/POM/4.0.0"`のようにプレフィックスを定義してから`/hoge:project`とテストすべきではないでしょうか。
CC BY-SA 3.0
2017-05-07T08:30:37.637
34512
2017-05-07T08:30:37.637
5750
34510
answer
ネームスペースが設定されているためそのままの指定ではマッチしません。  
[local-name()](https://msdn.microsoft.com/ja-
jp/library/ms256070\(v=vs.120\).aspx)を使用する方法はすでにでていますので別の方法。  
とにかく指定が長くなるので、  
shellモードでsetnsでネームスペースの設定をします。  
下の例ではxをプレフィックスとして設定します。

```

    >xmllint --shell dummy-pom.xml
    / > setns x=http://maven.apache.org/POM/4.0.0
    / > xpath /x:project
    Object is a Node Set :
    Set contains 1 nodes:
    1  ELEMENT project
        default namespace href=http://maven.apache.org/POM/4.0.0
        namespace xsi href=http://www.w3.org/2001/XMLSchema-instan
        ATTRIBUTE schemaLocation
          TEXT
            content=http://maven.apache.org/POM/4.0.0 http:/...
    / > xpath //x:modelVersion/text()
    Object is a Node Set :
    Set contains 1 nodes:
    1  TEXT
        content=4.0.0
    / >
    
```
CC BY-SA 3.0
2017-05-07T09:20:27.523
34514
2017-05-07T09:20:27.523
5044
34510
answer