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
我正在使用 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