xslt

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>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值