1

xpath を使用して、maven pom.xml の artefactID でフィルタリングすることにより、プラグインの兄弟を取得しています。

以下は私のxmlです.Xpath式を使用して//plugin/artifactId[text()="test-maven"]要素をフィルタリングできますが、「構成」などの要素の子兄弟を取得したいその中にいる子供たち。Xpathをこのように変更してみました

//plugin/artifactId[text()=\"test-maven\"]/../executions/execution/configuration .要素内のすべてのテキストを返し、特定のノード名と値をトラバースまたは取得できません.

この問題を解決する方法について誰か助けてもらえますか

<?xml version="1.0" encoding="UTF-8"?>
<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/maven-v4_0_0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>net.xxx.test</groupId>
    <artifactId>xxx-test</artifactId>
    <version>0.0.20-SNAPSHOT</version>
    <packaging>apk</packaging>
    <name>xxx-test</name>

    <properties>
        <platform.version>2.3.3</platform.version>
        <android.sdk.version>3</android.sdk.version>
    </properties>

    <dependencies>
        <dependency>
            <groupId>com.google.android</groupId>
            <artifactId>android</artifactId>
            <!--  <version>${platform.version}</version> -->
            <version>17</version>
            <scope>provided</scope>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>com.jayway.maven.plugins.android.generation2</groupId>
                <artifactId>android-maven-plugin</artifactId>
                <version>3.1.1</version>
                <configuration>
                    <androidManifestFile>${project.build.directory}/AndroidManifest.xml</androidManifestFile>
                    <assetsDirectory>${project.basedir}/assets</assetsDirectory>
                    <resourceDirectory>${project.basedir}/res</resourceDirectory>
                    <nativeLibrariesDirectory>${project.basedir}/src/main/native</nativeLibrariesDirectory>
                    <sdk>
                        <platform>17</platform>
                    </sdk>
                    <undeployBeforeDeploy>true</undeployBeforeDeploy>
                </configuration>
                <extensions>true</extensions>
            </plugin>
            <plugin>
                 <groupId>org.xxxsource</groupId>
                  <artifactId>test-maven</artifactId>
                  <version>0.0.1</version>
                  <executions>
                    <execution>
                        <id>Maven plugin</id>
                        <phase>install</phase>
                        <goals>
                            <goal>execute</goal>
                        </goals>
                       <configuration>
                                <fileToUpload>${project.build.directory}/${project.artifactId}-${project.version}.apk</fileToUpload> 
                                <!-- <secretKey>b3b47266-2d07-44d2-a4c4-23a64a2c9ff8</secretKey> 
                                 <uploadKey>e707d458-c9ae-4ce5-887f-8c70f97ad801-51334304-d180-4031-917f-a5c58768c7ba</uploadKey> -->

                                 <secretKey>b3b47266-211111111d07-44d2-a41111111c4-23a64a2c9ff8</secretKey> 
                                 <uploadKey>e707d458-c9ae-4ce111111111115-887f-8111111111111111c70f97ad801-51334304-d180-4031-917f-a5c58768c7ba</uploadKey>

                                <releaseNote>TEST</releaseNote> 
                                <grantUsers>
                                    <grantUser>c273ae88-2314-4d85-a7e5-2c2cd40638a8</grantUser>
                                    <grantUser>22a8d3df-7724-4941-8bd4-a735a807bc99</grantUser>
                                </grantUsers>
                       </configuration> 
                     </execution>
                </executions>          
            </plugin>
        </plugins>
    </build>
</project>

これが私が使用している私のコードです:-

                    Document doc = builder.parse(file);
        XPathFactory factory = XPathFactory.newInstance();
        XPath xpath = factory.newXPath();
        XPathExpression expr = xpath.compile(path);
        Object result = expr.evaluate(doc, XPathConstants.NODESET);
        NodeList nodes = (NodeList) result;

        for (int i = 0; i < nodes.getLength(); i++) {
            final Node node = (Node) nodes.item(i);
            System.out.println("Node  Name " + node.getNodeName());
            // System.out.println("Node  " + node.getTextContent());

            if (node.hasChildNodes()) {
                System.out.println("HAS Child");

                NodeList nodes1 = (NodeList) node.getChildNodes();
                for (int j = 0; j < nodes1.getLength(); j++) {
                    final Node node1 = (Node) nodes1.item(j);
                    System.out.println("Node  Child " + node1.getNodeName()
                            + " value : =" + node1.getTextContent());
                }

            }
        }

これが私の出力です:-

ノード名構成 HAS Child Node Child #text value : =

ノードの子 fileToUpload 値: =${project.build.directory}/${project.artifactId}-${project.version}.apk ノードの子 #テキスト値: =

Node Child #コメント値: = b3b47266-2d07-44d2-a4c4-23a64a2c9ff8 e707d458-c9ae-4ce5-887f-8c70f97ad801-51334304-d180-4031-917f-a5c58768c7ba Node Child #テキスト値: =

ノードの子の secretKey 値: =b3b47266-211111111d07-44d2-a41111111c4-23a64a2c9ff8 ノードの子 #テキスト値: =

Node Child uploadKey 値: =e707d458-c9ae-4ce111111111115-887f-8111111111111111c70f97ad801-51334304-d180-4031-917f-a5c58768c7ba Node Child #テキスト値: =

Node Child releaseNote 値 : = Maven Node Child からの WLP_TEST #text 値 : =

ノード子 grantUsers 値: = c273ae88-2314-4d85-a7e5-2c2cd40638a8 22a8d3df-7724-4941-8bd4-a735a807bc99

ノードの子 #テキスト値: =

#text ノードが出力される理由と、それを回避できるかどうかはわかりません。

4

1 に答える 1

0

getChildNodes() は、テキスト ノードを含むすべてのノードを返します (それは明らかです)。したがって、次を使用してテキスト ノードを除外するif (node1.nodeType == 1)必要があります (ただし、その値には定数が必要1です。名前を調べるには、言語/ライブラリのマニュアルを参照してください)。

于 2013-11-16T00:00:09.187 に答える