XSLT来没有命名空间复制元素(XSLT to copy element without names

2019-10-19 06:46发布

我会先资格,我不是在XSLT特别好。 但是我想要做的就是3个XML文档复制到一个母文件。

在XSLT工作正常,但正在打印的xmlns =“”这是造成我的验证失败属性的父节点。

所以我的问题是如何从单独的文件复制这些元件,没有它补充说,xmlns属性?

这是输出到目的地的样本 - 注意,我希望它不打印的xmlns =“”。

<Feed xmlns="http://www.bazaarvoice.com/xs/PRR/ProductFeed/5.6"
name="Officeworks" incremental="false"
extractDate="2014-01-28T14:42:12+11:00">
  <Brands xmlns="">
    <Brand>
      <Name>Panasonic</Name>
      <ExternalId>12345</ExternalId>
    </Brand>

这是XSLT:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:ex="http://exslt.org/dates-and-times" extension-element-prefixes="ex"> 

<xsl:template match="/">
  <xsl:variable name="dateNow" select="ex:date-time()"/>
  <Feed xmlns="http://www.bazaarvoice.com/xs/PRR/ProductFeed/5.6" name='Officeworks' incremental='false'>
  <xsl:attribute name="extractDate"><xsl:value-of select="$dateNow" /></xsl:attribute>
  <xsl:copy-of select="document('@dataload.bv.xml.out.tmp@/bv_brands_xml.001.xml')/Brands"/>
  <xsl:copy-of select="document('@dataload.bv.xml.out.tmp@/bv_categories_xml.001.xml')/Categories"/>
  <xsl:copy-of select="document('@dataload.bv.xml.out.tmp@/bv_products_xml.001.xml')/Products"/>
  </Feed>
</xsl:template>

</xsl:stylesheet>

Answer 1:

xmlns="" (是因为你认定一个默认的命名空间需要xmlns="http://www.bazaarvoice.com/xs/PRR/ProductFeed/5.6" ,然后输出其不在该命名空间节点)。 对于XML来表示得当,它有权取消默认的命名空间。

验证失败怎么你还没有告诉我们。 如果它失败,因为这些节点应在指定的命名空间,他们需要或者是在命名空间中复制它们之前,或者你需要更换xsl:copy-of一个是通过提取他们的localName和使用明确重建他们的操作这一点,所需的命名空间作为参数xsl:element的操作。 在右相关中列出的项目会告诉你更多关于这一点。



Answer 2:

您可以使用:

<xsl:copy-of select="bla" copy-namespaces="no"></xsl:copy-of>

对不起...只注意到你正在使用XSLT 1,所以复制的命名空间,不支持......我的坏



文章来源: XSLT to copy element without namespace