如何区分具有相同名称的不同XML属性?

问题描述 投票:0回答:1

假设我们具有以下XML结构:

<?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/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <artifactId>ProjectName</artifactId>
    <version>1.0-SNAPSHOT</version>
    <properties>
        <java.version>1.8</java.version>
    </properties>
    <build>
        <plugins>
            <plugin>
                <groupId>pl.project13.maven</groupId>
                <artifactId>git-commit-id-plugin</artifactId>
                <version>2.2.4</version>
                <executions>
                    <execution>
                        <id>get-the-git-infos</id>
                        <goals>
                            <goal>revision</goal>
                        </goals>
                    </execution>
                </executions>
                <configuration>
                    <dotGitDirectory>${project.basedir}/.git</dotGitDirectory>
                    <prefix>git</prefix>
                    <verbose>false</verbose>
                    <generateGitPropertiesFile>true</generateGitPropertiesFile>
                    <generateGitPropertiesFilename>${project.build.outputDirectory}/${artifactId}_git.properties</generateGitPropertiesFilename>
                    <format>json</format>
                </configuration>
            </plugin>
        </plugins>
    </build>
</project>

我在下一行中看到对artifactId的引用,解析为ProjectName(文件中的第一个artifactId),而不是git-commit-id-plugin(文件中的第二个artifactId)。

<generateGitPropertiesFilename>${project.build.outputDirectory}/${artifactId}_git.properties</generateGitPropertiesFilename>

XML解析器如何解析对一个以上存在(在不同级别)的属性的引用?它是否解析为当前级别之前的最高级别(假定根为最高级别)可以找到的同名属性?

xml parsing properties xml-parsing
1个回答
0
投票

XML解析器...很好...解析。它与xml内容的解释无关。 xml的使用者(需要该xml的程序的作者)取决于"${project.build.outputDirectory}/${artifactId}_git.properties"之类的字符串。那只是一个字符串。 XML解析器没有含义。对于消费者而言,他可以用自己喜欢的任何东西代替artifactId。可能是project.artifactId。可能是project.build.plugins.plugin.artifactId。甚至可能像诗一样奇怪。因此,直到阅读了该特定xml配置文件的文档,您才能知道。

© www.soinside.com 2019 - 2024. All rights reserved.