在根目录中添加命名空间将复制到子节点

Adding namespace in root gets copied to child nodes

提问人:Barney 提问时间:7/8/2022 更新时间:7/8/2022 访问量:106

问:

在我在这个网站上找到的下面的例子中,一个空的xmlns=“”被复制到所有子节点中。造成这个错误的原因可能是什么?

我的模板:

     <xsl:element xmlns="http://www.element-examples.org" name="{local-name()}">
       <xsl:apply-templates select="@*|node()"/>
    </xsl:element>
 </xsl:template>  

输出:

    <projectgegevens xmlns="http://www.element-examples.org">
      <idopdracht **xmlns=""**>28062262</idopdracht>
      <projectcode **xmlns=""**>160622</projectcode>
      <projectnaam **xmlns=""**>FF0000390001</projectnaam>
      <ordernummer xmlns="">M2M-2022010071</ordernummer>
      <projectleider xmlns="">FF000039003</projectleider>
      <opmerking xmlns=""></opmerking>
      <status xmlns="">5</status>
      <datumverwacht xmlns="">2022-06-29</datumverwacht>
      <certificaatnummer xmlns="">2020083810</certificaatnummer>
      <analysemonsters xmlns="">
模板 XSLT 命名空间 xml-namespaces

评论

1赞 Martin Honnen 7/8/2022
我们既不知道您拥有哪个输入,也不知道您如何处理它(因为仅意味着您处理属性和子节点),但通常,如果您将节点从无命名空间中的输入复制到父节点现在位于命名空间中的输出,则会出现此问题,然后序列化程序会添加 以将复制的元素保留在非命名空间中。所以不要复制,转换来更改命名空间。<xsl:apply-templates select="@*|node()"/>xmlns=""

答:

0赞 Michael Kay 7/8/2022 #1

如果不查看所有代码,我们无法具体告诉你你做错了什么,但当序列化程序发现结果树在无命名空间中有一个元素时,命名空间声明会生成,该元素的父元素位于命名空间中(但没有前缀)。xmlns=""

若要了解子元素不位于命名空间中,而不是与其父元素位于同一命名空间中的原因,需要查看创建子元素的 XSLT 代码。请注意,元素的命名空间完全由创建元素的指令确定;它永远不会自动从结果树中其父元素的命名空间继承(尽管它可能继承自样式表中的父元素)。

评论

0赞 Barney 7/8/2022
谢谢,我正在尝试在早期阶段添加xmlns