XDocumentXML解析问题

XDocumentXML解析问题,xml,linq,linq-to-xml,Xml,Linq,Linq To Xml,我正在使用XDocument和LINQ解析一些XML文件,其中一些工作正常,但另一些没有。通过调查,我发现了不同之处: 工作的文件如下所示: <?xml version="1.0" encoding="UTF-8" standalone="yes"?> <Scenarios xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <Scenario> ... </Sce

我正在使用XDocument和LINQ解析一些XML文件,其中一些工作正常,但另一些没有。通过调查,我发现了不同之处:

工作的文件如下所示:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<Scenarios xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    <Scenario>
        ...
    </Scenario>
</Scenarios>
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<Scenarios xmlns="http://www.w3.org/2001/XMLSchema-instance">
    <Scenario>
        ...
    </Scenario>
</Scenarios>

...
看起来不像这样的文件:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<Scenarios xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    <Scenario>
        ...
    </Scenario>
</Scenarios>
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<Scenarios xmlns="http://www.w3.org/2001/XMLSchema-instance">
    <Scenario>
        ...
    </Scenario>
</Scenarios>

...
如果看不到,则缺少的元素是根元素中的:xsi别名

我只是想知道为什么会这样。XDocument.Load()不会解析其他相同的文件,除非它们具有该别名


提前谢谢

在第一个示例中,您说任何带有
xsi
前缀的节点(元素或属性)都来自XML模式名称空间

在第二个示例中,您的意思是没有任何前缀的任何节点都位于XML模式名称空间中

如果有前缀为
xsi
的节点,则需要像第一个一样进行声明,或者删除这些节点


编辑:正如斯维克正确指出的那样,XDocument默认情况下不执行架构验证,因此问题更可能是
..
包含一些带有
xsi
前缀的节点

什么意思,“不会被解析”?到底发生了什么?它会引发一些异常吗?您是否有任何使用XML中前缀为
xsi:
的元素不起作用?您基本上是对的,但我认为
XDocument
不会根据架构实际验证文档,除非您自己显式验证它。@svick我实际上没有检查它是否已验证。更新答案以给出更可能的原因。