xml - 如何区分具有相同名称的不同 XML 属性?
问题描述
假设我们有以下 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 解析器如何解析对多次存在(在不同级别)的属性的引用?它是否解析为在当前级别之前可以找到的最高级别的同名属性(假设 root 是最高级别) ?
解决方案
一个 XML 解析器……嗯……解析。它与 xml 内容的解释无关。由 xml 的使用者(需要该 xml 的程序的作者)决定如何使用"${project.build.outputDirectory}/${artifactId}_git.properties"
. 那只是一个字符串。XML 解析器不知道它的含义。而对于消费者而言,他可以artifactId
用任何他喜欢的东西来代替。可能是project.artifactId
。可能是project.build.plugins.plugin.artifactId
。或者它甚至可能像一首诗一样奇怪。所以...在您阅读该特定 xml 配置文件的文档之前,您永远不会知道。
PS。然后......有XSLT。但这是一个不同的故事。然而,同样的输出——在您阅读 XSLT 代码或一些文档之前,您永远不知道结果会是什么。
推荐阅读
- c++ - C++ std::maps 和带有构造函数的类值
- python - 如何让散景小部件与 plot .on_change() 交互
- laravel - 在 Laravel 中排除条件路由
- timestamp - 如何在 CockroachDB 中将 Unix 时间戳转换为日期?
- java - JPA/Hibernate:如何在同一会话中为具有 @Id 注释的字段保留重复值?
- c++ - 它说没有匹配的成员函数来调用“插入”。这是一个学校项目,我真的被卡住了
- azure-logic-apps - 通过自定义连接器使用大型 API。API 的定义超过了 1MB 的文件大小限制
- caching - PIPT L1 缓存的最小关联性也是 VIPT,访问集合而不将索引转换为物理
- machine-learning - Davies-Bouldin 指数越高或越低得分越好
- java - 至少 1 个大写字母,后跟数字、可选短划线和空格