gpt4 book ai didi

c# - XML 文件是否总是具有相同的结构?

转载 作者:行者123 更新时间:2023-11-30 21:42:42 25 4
gpt4 key购买 nike

我正在使用 .NET Framework 4.6.2 开发一个 C# 库来解析大型 xml 文件。

这个库将成为 Windows 服务的一部分,我不想浪费内存来使用 XDocument 一次加载 XML 文件。

也许有更好的选择,但我决定改用 XmlReader。特别是 ReadToFollowing 方法。

我读到 XmlReader 代表一个读取器,它提供对 XML 数据的快速、非缓存、仅向前访问。

我想阅读的 xml 文件有一个部分包含一些数据,我必须在继续阅读之前检查这些数据。另一个有更多有用数据的部分,以及最后一节包含大量代码。

如果文件始终具有相同的节顺序是可以的,但我不确定,这是我的问题,文件是否始终具有我上面描述的相同节顺序。

XML 文件是否具有相同的节顺序?我有它的 XSD 文件,但我不知道这些文件是否描述了其节中的顺序。

XML 文件的示例如下(由于 NDA,我无法共享原始文件):

<?xml version="1.0" encoding="UTF-8"?>
<Incomming_Msg xmlns="http://xxx/xxx.2"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xxx/xxx.2-messages.xsd ">
<DataToCheck>
<Field1>
<SubField1>123456789</SubField1>
</Field1>
<Field2>
<SubField2>123asz11-12asd</SubField2>
<!-- Omitted for brevety -->
</Field2>
<!-- Omitted for brevety -->
</DataToCheck>
<DataToInsert1>
<!-- Omitted for brevety -->
</DataToInsert1>
<DataToInsert2>
<!-- Omitted for brevety -->
</DataToInsert2>
<DataToInsert3>
<!-- Omitted for brevety -->
</DataToInsert3>
<TonsOfCodes>
<CodeLevel>
<Code>
<Serial>1234567890</Serial>
</Code>
</CodeLevel>
<!-- Omitted for brevety -->
<!-- This section could be very very big -->
</TonsOfCodes>
</Incomming_Msg>

例如,如果 xml 文件在文件开头带有 TonsOfCodes 部分,读取文件以找到部分 DataToCheck 将非常慢。

最佳答案

Will a XML file have the same structure always?

答案取决于你如何定义“相同结构”

在 XML 级别,答案是否定的: 在严格的 XML 级别,您唯一的保证是 XML 是 well-formed .这意味着它符合 standard for being XML :元素已正确关闭;属性值有适当的引号;只有一个根元素;等等

在架构级别,答案可能是肯定的:更高级别的结构 promise 需要单独的契约,例如架构。在特定模式中表达的约束的特殊性范围内,是的,可以说有效的 XML 文件始终具有相同的结构。但是请注意,这在很大程度上取决于模式指定的特定约束。 XSD 中的 xs:sequence 将限制元素排序,而 xs:all 将允许不同的顺序。此外,一些属性(如属性排序)在 XML 级别无关紧要,因此 XSD 甚至无法解决这个问题。

关于c# - XML 文件是否总是具有相同的结构?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42385494/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com