XSLT中的别名前缀(不是命名空间)

haa*_*ael 1 xml xslt transformation xml-namespaces

我想在样式表本身的前缀中更改输出中的前缀.

XSLT文件:

<stylesheet version="1.0" xmlns:a="nsA">
 <template match="/">
  <a:out/>
 </template>
</stylesheet>
Run Code Online (Sandbox Code Playgroud)

我得到了什么:

<a:out xmlns:a="nsA" />
Run Code Online (Sandbox Code Playgroud)

我想要的是:

<b:out xmlns:b="nsA" />
Run Code Online (Sandbox Code Playgroud)

请注意,我只想更改前缀,而不是命名空间.元命名空间别名将仅转换命名空间,保留前缀不变.

如果可以完全删除前缀,则可以获得奖励积分:

<out xmlns="nsA" />
Run Code Online (Sandbox Code Playgroud)

请注意,XSLT元素没有前缀,输出元素是前缀.它必须保持这样.我知道问题可以通过前缀XSLT和取消前缀输出元素来解决,但它不是一个选项.要输出的元素必须具有样式表中提供的前缀,只有在输出中才能更改它们.

mic*_*57k 5

我得到了什么:

<a:out xmlns:a="nsA" />

不,这不是你得到的 - 至少不是你应该得到的.使用一个像样的XSLT处理器,您将收到一个错误,告诉您该文档不是有效的样式表.

请注意,XSLT元素没有前缀

不确定为什么你会想要它(它类似于在腿上拍摄自己)但是如果你坚持,你可以为样式表定义默认命名空间,并使用未加前缀的XSLT元素,例如:

<stylesheet version="1.0" 
xmlns="http://www.w3.org/1999/XSL/Transform">

<template match="/">
    <!-- ... -->
</template>

</stylesheet>
Run Code Online (Sandbox Code Playgroud)

但是,在这种情况下,非XSLT元素必须是前缀或明确指定名称空间.

如果可以完全删除前缀,则可以获得奖励积分:

<out xmlns="nsA" />

如果这就是你想要的,你为什么不写那个呢?

其中一个:

<stylesheet version="1.0" 
xmlns="http://www.w3.org/1999/XSL/Transform"
xmlns:a="nsA"
exclude-result-prefixes="a">

<template match="/">
    <element name="out" namespace="nsA"/>
</template>

</stylesheet>
Run Code Online (Sandbox Code Playgroud)

或者干脆:

<stylesheet version="1.0" 
xmlns="http://www.w3.org/1999/XSL/Transform"
xmlns:a="nsA"
exclude-result-prefixes="a">

<template match="/">
    <out xmlns="nsA"/>
</template>

</stylesheet>
Run Code Online (Sandbox Code Playgroud)

将产生:

<?xml version="1.0" encoding="UTF-8"?>
<out xmlns="nsA"/>
Run Code Online (Sandbox Code Playgroud)

请注意,xmlns:a="nsA"声明仅用于寻址源XML文档中恰好位于相同"nsA"命名空间中的元素.否则它完全是多余的.

  • @haael好的,那么有什么问题呢?我给你一个方法来实现你所要求的,不是吗? (2认同)