我的命名空间有xslt2.0转换问题,请帮忙解决这个问题
很少有XML具有名称空间属性,很少有XML没有名称空间属性。
文件1:
<root id="BC" xmlns="http://www.example.com/ptktims"><child xmlns="http://www.example.com/times"></child></root>
文件2:
<root id="BC"><child></child></root>
第一个文件工作正常,当我调用名称空间<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xpath-default-namespace="http://www.example.com/">
,但第二个文件不起作用。
当我没有调用名称空间<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
时,第二个文件正常工作,但第一个文件无效。
请指教,如何转换XML表单XSLT?
答案 0 :(得分:0)
您有两个选项,使用通配符作为命名空间前缀:
<xsl:template match="*:root">
<xsl:value-of select="*:child"/>
</xsl:template>
或为不同的名称空间编写匹配项,例如
<xsl:stylesheet
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:ptktims="http://www.example.com/ptktims"
xmlns:times="http://www.example.com/times" version="2.0">
<xsl:template match="root">
<xsl:value-of select="child"/>
</xsl:template>
<xsl:template match="ptktims:root">
<xsl:value-of select="times:child"/>
</xsl:template>
第三个选项是链转换或转换步骤,其中第一步规范化命名空间(全部删除或放置所需的命名空间),然后第二步只需要使用规范化输入格式的模板。