XML 包含多个名称空间 - 但它只有一个

The XML contains multiple namespaces - but it only has one

我正在使用 SSIS 导入 XML 个文件。

当我尝试生成 XSD 时,它显示错误:

Unable to infer the XSD from the XML file. The XML contains multiple namespaces

这里是 XML 文件的一个非常基本的净化版本:

<?xml version="1.0"?> 
<SM>  
  <xF>     
    <MA xmlns="http://www.somewhere.com/ZZ/ZZ.xsd">
  </SM>  
  .... other stuff ...
</xF>     

里面肯定只有一个xmlns=,而且没有命名空间限定符,有点像这样:

Unable to infer XSD from XML file .XML contain Multiple Namespaces

...除了有没有命名空间限定符(文件中唯一的:在URL)

如果里面只有一个xmlns=,那岂不是只有一个命名空间,不多?

如果存在某种 'inherent' 命名空间,则意味着 SSIS 无法导入任何包含 xmlns= 声明的 xml 文件。

谁能澄清一下:一个只有一个 xmlns= 的 XML 文件有多少个命名空间?有没有我可以使用的工具来枚举名称空间以便我识别它们?

有很多在线解决方案说 "remove the xmlns with xlst" 但我宁愿先了解为什么 SSIS 认为它有多个命名空间。

如果我删除 xmlns 部分,生成 XSD 并导入它导入 OK。如果我保留 xmlns 并使用现有的 XSD 进行导入,则不会导入任何行。我认为这是因为XSD需要引用命名空间,但是如果我将targetNamespace放入XSD,它仍然没有导入任何行.也许我需要找一个非 SSIS XML 工具来做一些调查。

从技术上讲,这个错误有点误导。您的原始文档包含多种元素,其中一些元素具有 no 命名空间,而另一些元素具有命名空间。 MA 元素上的名称空间声明实际上将“http://www.somewhere.com/ZZ/ZZ.xsd”声明为其下方的元素和属性的默认名称空间,因为它没有前缀。

因此,为了回答您的问题,您的文档有一个命名空间。但是,它包含没有命名空间的元素以及位于您的一个命名空间中的元素,这大概是混淆 SSIS 的原因。

经过一番思考和阅读,我将 xmlns 移到了顶部:

<?xml version="1.0"?> 
<SM xmlns="http://www.somewhere.com/ZZ/ZZ.xsd">  
  <xF>     
    <MA>
  </SM>  
  .... other stuff ...
</xF>

并且不再出现错误。我认为也许只有文档的上半部分有某种默认(空白?)命名空间,直到它到达 xmlns 部分,默认值已更改,这就是问题所在。

将此与已接受的答案放在一起:只有一个命名空间,错误消息具有误导性。实际的解决方案是删除 xmlns 或将其移动到第一个元素

这遵循 link 中描述的 'default namespaces' 的定义:http://www.w3schools.com/xml/xml_namespaces.asp