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和取消前缀输出元素来解决,但它不是一个选项.要输出的元素必须具有样式表中提供的前缀,只有在输出中才能更改它们.
我得到了什么:
<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"命名空间中的元素.否则它完全是多余的.
| 归档时间: |
|
| 查看次数: |
1066 次 |
| 最近记录: |