Xml xsl命名空间uri转换
给定一个在名称空间中实现了版本控制方案的xml文档,我可以应用什么xslt来转换所有URI,将文档映射到新版本 我不知道文档将使用什么名称空间,也不知道引用在文档中是如何组织的 e、 g 到Xml xsl命名空间uri转换,xml,xslt,Xml,Xslt,给定一个在名称空间中实现了版本控制方案的xml文档,我可以应用什么xslt来转换所有URI,将文档映射到新版本 我不知道文档将使用什么名称空间,也不知道引用在文档中是如何组织的 e、 g 到 在XSLT2和XSLT3中,可以使用xsl:namespace-so创建名称空间节点 应该给你一个想法,在它转变 <a:add xmlns:a="urn:_2018_1.a" xmlns:b="urn:_2018_1.b" xmlns:c="urn:_2018_1.c" &
在XSLT2和XSLT3中,可以使用xsl:namespace-so创建名称空间节点 应该给你一个想法,在它转变
<a:add
xmlns:a="urn:_2018_1.a"
xmlns:b="urn:_2018_1.b"
xmlns:c="urn:_2018_1.c"
>
</a:add>
进入
使用Saxon 9.8。谢谢。XSLT2和XSLT3是唯一现实的选择吗?我在Java中工作,与其添加额外的依赖项,不如依赖于内置的内容。XSLT 1没有xsl:namespace元素来构建新的名称空间,这是XSLT 2或3的主要功能,需要它以通用和紧凑的方式工作。我不再习惯用XSLT 1的术语来思考问题,让我们等一下XSLT 1的爱好者会给你什么建议。如果你在Java中工作,那么使用XSLT的版本几乎没有什么借口,现在已经有将近20年的历史了。事实上,没有纯XSLT 1.0解决方案,但是有一种解决方案使用XSLT1.0加上节点集扩展。要在XSLT 1.0中动态创建名称空间,首先在该名称空间中构造一个元素节点,使用这种名称空间的人应该在黎明时分拍摄,但我想,如果每个人都正确地设计XML,XSLT就会变得多余。@MichaelKay总是需要将为一个目的正确设计的XML转换为为为另一个目的正确设计的XML。@Chomah你确定需要这样做吗?将节点从旧名称空间转换为新名称空间就足够了,并让XSLT处理器提供必要的名称空间声明。
<a:add
xmlns:a="urn:_2019_1.a"
xmlns:b="urn:_2019_1.b"
xmlns:c="urn:_2019_1.c"
....
>
...
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
exclude-result-prefixes="xs"
version="3.0">
<xsl:param name="old-ns-year" select="'2018'"/>
<xsl:param name="new-ns-year" select="'2019'"/>
<xsl:mode on-no-match="shallow-copy"/>
<xsl:template match="*">
<xsl:element name="{name()}" namespace="{replace(namespace-uri(), $old-ns-year, $new-ns-year)}">
<xsl:apply-templates select="namespace::*, @*, node()"/>
</xsl:element>
</xsl:template>
<xsl:template match="namespace::*">
<xsl:namespace name="{name()}" select="replace(., $old-ns-year, $new-ns-year)"/>
</xsl:template>
<xsl:template match="@*">
<xsl:attribute name="{name()}" namespace="{replace(namespace-uri(), $old-ns-year, $new-ns-year)}" select="."/>
</xsl:template>
</xsl:stylesheet>
<a:add
xmlns:a="urn:_2018_1.a"
xmlns:b="urn:_2018_1.b"
xmlns:c="urn:_2018_1.c"
>
</a:add>
<a:add xmlns:a="urn:_2019_1.a" xmlns:b="urn:_2019_1.b" xmlns:c="urn:_2019_1.c">
</a:add>