You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用XSLT从现有XML生成新XML——Maven运行时修改pom.xml需求

Maven中使用XSLT提取pom.xml转换后的完整节点

我明白你正在通过Maven集成XSLT来处理pom.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>
  <group...

核心解决思路

要实现仅输出转换后的完整XML节点,需要重点关注两个关键点:

  • 正确处理Maven POM的命名空间(这是很多开发者踩坑的核心点)
  • 精准匹配并提取/转换目标节点,确保输出是结构完整的XML片段

示例XSLT模板(以提取项目核心信息节点为例)

假设你需要生成包含项目基本信息的完整节点,XSLT可以这么写:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="2.0"
                xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
                xmlns:pom="http://maven.apache.org/POM/4.0.0"
                exclude-result-prefixes="pom">

  <!-- 匹配根节点,生成目标完整节点 -->
  <xsl:template match="/pom:project">
    <project-deliverable>
      <xsl:copy-of select="pom:groupId"/>
      <xsl:copy-of select="pom:artifactId"/>
      <xsl:copy-of select="pom:version"/>
      <xsl:copy-of select="pom:name"/>
    </project-deliverable>
  </xsl:template>

  <!-- 忽略所有不需要的节点和文本 -->
  <xsl:template match="text()|@*"/>
</xsl:stylesheet>

Maven中配置XSLT转换插件

要在Maven构建过程中自动执行这个转换,你可以在pom.xml中配置xml-maven-plugin,确保转换后的文件作为交付资源输出:

<build>
  <plugins>
    <plugin>
      <groupId>org.codehaus.mojo</groupId>
      <artifactId>xml-maven-plugin</artifactId>
      <version>1.0.2</version>
      <executions>
        <execution>
          <phase>generate-resources</phase>
          <goals>
            <goal>transform</goal>
          </goals>
          <configuration>
            <transformationSets>
              <transformationSet>
                <dir>${project.basedir}</dir>
                <includes>
                  <include>pom.xml</include>
                </includes>
                <stylesheet>${project.basedir}/src/main/resources/pom-transform.xsl</stylesheet>
                <outputDir>${project.build.directory}/generated-resources</outputDir>
                <fileMappers>
                  <fileMapper implementation="org.codehaus.plexus.components.io.filemappers.FileExtensionMapper">
                    <targetExtension>.xml</targetExtension>
                  </fileMapper>
                </fileMappers>
              </transformationSet>
            </transformationSets>
          </configuration>
        </execution>
      </executions>
    </plugin>
  </plugins>
</build>

关键注意事项

  • 必须在XSLT中声明POM的命名空间(http://maven.apache.org/POM/4.0.0),否则无法正确匹配节点
  • 如果你的预期输出是其他类型的完整节点,只需调整XSLT中xsl:copy-of或xsl:apply-templates的匹配逻辑即可
  • 转换后的文件默认会输出到target/generated-resources目录,该目录下的文件会被Maven自动打包为交付资源

如果你能补充完整的XSLT代码和预期输出的具体节点示例,我可以帮你进一步优化转换逻辑!

内容的提问来源于stack exchange,提问作者Thilak

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 07:46:59