xpath语法可以在 http://www.w3school.com.cn/xpath/xpath_examples.asp 上在线测试
xslt在浏览器中测试的方法,适合于html转换测试
在xml的顶部加上
<?xml version="1.0" encoding="utf-8" ?>
<?xml-stylesheet type="text/xsl" href="XSLTFile1.xslt"?>
xslt转换在java中测试的方法
// copy from https://github.com/lib4j/lib4j-xml/blob/master/transform/src/main/java/org/lib4j/xml/transform/Transformer.java
package com;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.net.URISyntaxException;
import java.net.URL;
import javax.xml.transform.TransformerException;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.TransformerFactoryConfigurationError;
import javax.xml.transform.stream.StreamResult;
import javax.xml.transform.stream.StreamSource;
public final class Transformer {
private static TransformerFactory factory;
static {
try {
factory = TransformerFactory.newInstance("net.sf.saxon.TransformerFactoryImpl", null);
}
catch (final TransformerFactoryConfigurationError e) {
factory = TransformerFactory.newInstance();
}
}
public static void transform(final URL stylesheet, final URL in, final File out) throws IOException, TransformerException {
try (final InputStream input = in.openStream()) {
final StreamSource streamSource = new StreamSource(stylesheet.openStream(), stylesheet.toURI().toASCIIString());
final javax.xml.transform.Transformer transformer = factory.newTransformer(streamSource);
transformer.transform(new StreamSource(input, in.toURI().toASCIIString()), new StreamResult(out));
}
catch (final URISyntaxException e) {
throw new TransformerException(e);
}
}
private Transformer() {
}
public static void main(String[] args) throws Exception{
Transformer.transform(new File("E:\\pro\\git\\com-test\\src\\main\\resources\\stylesheet.xsl").toURL(),new File("E:\\pro\\git\\com-test\\pom.xml").toURL(), new File("E:\\tmp\\pom.xml"));
}
}
利用xslt对pom.xml增加dependency
注意pom.xml的命名空间是xmlns=“http://maven.apache.org/POM/4.0.0”
stylesheet和xml的命名空间是不同的,为了不生成空的命名空间xmlns=""需要在stylesheet中指定命名空间保持和xml一致
方法一: 获取父节点做拷贝stylesheet.xsl
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0" xmlns="http://maven.apache.org/POM/4.0.0">
<xsl:param name="common.version"/>
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes" />
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="/*/*[local-name()='dependencies']">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
<dependency>
<groupId>com.test</groupId>
<artifactId>test-common</artifactId>
<version><xsl:value-of select="common.version"/></version>
<scope>provided</scope>
</dependency>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
方法二:取得最后一个兄弟节点插入数据
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0" xmlns="http://maven.apache.org/POM/4.0.0" xmlns:my="http://maven.apache.org/POM/4.0.0" exclude-result-prefixes="my">
<xsl:param name="common.version"/>
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes" />
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="/my:project/*[last()]">
<xsl:copy-of select="." />
<distributionManagement>
<repository>
<id>my-releases</id>
<name>myRelease Repository </name>
<url>http://maven.mycompany.com/nexus/content/repositories/my_releases/</url>
</repository>
<snapshotRepository>
<id>my-snapshots</id>
<name>my Snapshot Repository </name>
<url>http://maven.mycompany.com/nexus/content/repositories/my_snapshots/</url>
</snapshotRepository>
</distributionManagement>
</xsl:template>
<xsl:template match="/*/*[local-name()='dependencies']/*[last()]">
<xsl:copy-of select="." />
<dependency>
<groupId>com.test</groupId>
<artifactId>test-common</artifactId>
<version><xsl:value-of select="$common.version"/></version>
<scope>provided</scope>
</dependency>
</xsl:template>
</xsl:stylesheet>