Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
XML包含多个名称空间,但它只有一个名称空间_Xml_Ssis_Xsd_Sql Server 2012 - Fatal编程技术网

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

XML包含多个名称空间,但它只有一个名称空间,xml,ssis,xsd,sql-server-2012,Xml,Ssis,Xsd,Sql Server 2012,我正在使用SSI导入XML文件 当我尝试生成XSD时,它显示错误: 无法从XML文件推断XSD。XML包含多个名称空间 这里是XML文件的一个非常基本的净化版本: <?xml version="1.0"?> <SM> <xF> <MA xmlns="http://www.somewhere.com/ZZ/ZZ.xsd"> </SM> .... other stuff ... </xF>

我正在使用SSI导入XML文件

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

无法从XML文件推断XSD。XML包含多个名称空间

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

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

.... 其他东西。。。
它肯定只有一个
xmlns=
,并且没有名称空间限定符,有点像这样:

..除了没有名称空间限定符之外(文件中唯一的
位于URL中)

如果它只有一个
xmlns=
,这不意味着它只有一个名称空间,而不是很多吗

如果存在某种“固有”名称空间,则意味着SSIS无法导入任何包含
xmlns=
声明的xml文件

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

有许多在线解决方案说“使用xlst删除xmlns”,但我更愿意首先理解SSIS为什么认为它有多个名称空间


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

从技术上讲,这个错误有点误导。您的原始文档包含一组元素,其中一些没有名称空间,而另一些有名称空间。
MA
元素上的名称空间声明实际上将“”声明为其下元素和属性的默认名称空间,因为它没有前缀


因此,为了回答您的问题,您的文档有一个名称空间。但是,它包含没有名称空间的元素以及位于一个名称空间中的元素,这可能是让SSI感到困惑的原因。

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

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

.... 其他东西。。。
不再有错误。我认为可能只是文档的上半部分有某种默认(空白?)名称空间,直到它进入xmlns部分,默认名称被更改,这就是问题所在

将这一点与公认的答案结合起来:只有一个名称空间,错误消息具有误导性。实际的解决方案是删除xmlns或将其移动到第一个元素中


这遵循了此链接中描述的“默认名称空间”的定义:

感谢您的澄清,这正是我想要的。我一点也不惊讶这个错误是误导性的。