【问题标题】:XDocument XML Parsing IssueXDocument XML 解析问题
【发布时间】:2011-10-27 23:32:49
【问题描述】:

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

如果没有看到,则缺少的元素是根元素中的 :xsi 别名。

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

提前致谢!

【问题讨论】:

  • “不会被解析”是什么意思?究竟会发生什么?它会抛出一些异常吗?您是否有任何在 XML 中使用前缀 xsi: 的元素不起作用?

标签: xml linq linq-to-xml


【解决方案1】:

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

在第二个示例中,您是说任何没有任何前缀的节点都在 XML 模式命名空间中。

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

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

【讨论】:

  • 你说得对,但我不认为 XDocument 实际上会根据架构验证文档,除非你自己明确地验证它。
  • @svick 我实际上并没有检查它是否有效。已更新答案以给出更可能的原因。
猜你喜欢
  • 2013-11-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-08-01
  • 1970-01-01
相关资源
最近更新 更多