我尝试使用XSLT转换XML时添加名称空间前缀。起初我在xml文件中尝试<app:ABC>
并且获得与不绑定相关的异常(忘记它不确定异常)然后我遵循了这个link但我和#39;在理解这个问题时遇到了一些麻烦。我有以下问题如下:
<xsl:copy>
- 它用于什么?根据我的理解,这用于复制元素。它只复制根元素还是后续子元素?<xsl:apply-templates select="node()|@*">
- 我不确定这个过程是如何工作的,我该如何使用select属性? node()
它用于什么?也是@*
标志。我假设|
符号用于OR。如果没有,请指导我。<xsl:element name="app:{name()}" namespace="http://my.ns.uri">
- 根据我的理解,元素标记用于在XML中添加节点(元素)。在这里,我再次与name()
方法混淆。它用于什么?我们可以只使用元素名称而不是它吗?并且命名空间属性是否必要?请确认。<xsl:copy-of select="namespace::*"/>
不知道这件事。请指导我为什么只是使用这个或必要的。欢迎所有意见和建议。
由于
答案 0 :(得分:0)
您引用的解决方案是经过修改的identity transformation,它匹配XML节点并将模板应用于文档中的每个属性和节点,并将它们复制到输出中。
除非有更具体的模板可用,否则身份模板将匹配,复制上下文节点,然后将模板应用于匹配项的任何属性或子节点()。
<xsl:copy>
xsl:copy元素提供了一种复制当前节点的简便方法。 实例化
xsl:copy
元素会创建当前节点的副本。 当前节点的命名空间节点将自动复制为 好吧,但节点的属性和子节点不是 自动复制。xsl:copy
元素的内容是a 创建节点的属性和子节点的模板;该 内容仅针对可以具有的类型的节点进行实例化 属性或子节点(即根节点和元素节点)。
<xsl:apply-templates select="@*|node()"/>
- 从上下文节点中选择任何属性或子节点并应用模板,从样式表中定义的模板中查找最具体的匹配项。
|
是一个联盟运营商。它有点像OR,有点像AND,取决于你如何看待它。如果操作员的左侧或右侧有重复的节点,则结果将是删除了重复项的唯一项目列表。@*
将选择附加到上下文节点的任何属性node()
将选择作为context元素的子元素的任何元素,文本节点,处理指令或注释。等效表达式为*|text()|processing-instruction()|comment()
。 <xsl:element name="app:{name()}" namespace="http://my.ns.uri">
xsl:element
元素允许使用a创建元素 计算名称。要创建的元素的扩展名称是 由必需的name属性和可选的命名空间指定 属性。xsl:element
元素的内容是一个模板 已创建元素的属性和子元素。name属性被解释为属性值模板。它 如果实例化的字符串是一个错误 属性值模板不是QName。 XSLT处理器可能会发出信号 错误;如果它没有发出错误信号,那么它必须通过恢复 使实例化
xsl:element
元素的结果成为 通过实例化内容创建的节点序列xsl:element
元素,不包括任何初始属性节点。如果 如果不存在namespace属性,则QName将扩展为 扩展名使用有效的命名空间声明xsl:element
元素,包括任何默认的名称空间声明。如果存在namespace属性,则它也被解释为 属性值模板。由此产生的字符串 实例化属性值模板应该是URI引用。 如果字符串不是语法上合法的URI,则不是错误 参考。如果字符串为空,则表示扩展名 element具有空名称空间URI。否则,该字符串用作 要创建的元素的扩展名称的名称空间URI。该 name属性指定的QName的本地部分用作
。要创建的元素的扩展名的本地部分
name()
用于获取上下文节点的名称(正在转换的节点)。它的基本名称&#34;与命名空间前缀连接,命名空间前缀将绑定到@namespace
属性中声明的命名空间。模板可以(也可能应该)使用local-name()
,这将是&#34; base&#34;没有名称空间前缀的元素的名称。由于转换的源文档没有任何名称空间前缀,name()
和local-name()
将返回相同的值。@namespace
属性显式声明名称空间。 XSLT处理器将元素绑定到与styleshet中声明的namespace-prefix匹配的命名空间。 XSLT处理器可以使用指定的QName的前缀 选择用于输出的前缀时的name属性 创建元素为XML;但是,他们不需要这样做。
<xsl:copy-of selecct="namespace::*"/>
- 这显式复制了上下文节点上的所有命名空间节点。通常没有必要。