0

作者在他的书中说,在做文档顺序解释时:

换句话说,文档顺序只是指节点在 XML 文档中出现的顺序。例如,当您处理包含其他元素的元素时,顺序毫无疑问,但是当您处理同一级别的元素(兄弟元素)时,文档顺序指定它们应该按照它们在原始 XML 文档。

关于文档顺序还有一点需要了解——属性节点没有任何特殊顺序,即使是文档顺序。

现在我的问题是——

  • 为什么不需要属性的顺序?

  • “当你处理包含其他元素的元素时,顺序毫无疑问,” - 为什么?

  • -
4

3 回答 3

1

为了详细说明之前的答案并回复第一条评论,我认为这一切都围绕着层次结构。如果一个元素包含其他元素,则顺序很明显,因为存在层次结构。

在以下示例中,按文档顺序a排在前面。b

<a>
  <b/>
</a>

在以下示例中,bc是兄弟姐妹(都在同一级别; 的子级a)。兄弟姐妹的文档顺序不是很明显,但在文档顺序c之前b

<a>
  <c/>
  <b/>
</a>

如果结构复杂,这可能会让人感到困惑。例如,在下面的文档中,即使在层次树的更下方(它是的兄弟的子级),文档顺序也在d前面。bdbc

<a>
  <c>
    <d/>
  </c>
  <b/>
</a>

不需要属性的顺序,因为它们不代表层次结构。他们只是描述/进一步定义元素。想想元数据。他们真正拥有的唯一文档顺序是元素属性在任何该元素子元素之前。属性的相对顺序取决于实现。

例如,如果您/*/@*[1]在以下文档中使用 XPath:

<foo b="x" a="x"/>

您可以根据实现对属性的排序方式来获取a属性或b属性。

于 2013-07-19T19:58:22.467 回答
0

“当你处理包含其他元素的元素时,顺序毫无疑问,” - 为什么?

嗯,显然有一个问题,因为你刚刚问过了。只是作者出于某种原因认为答案是显而易见的。答案是,如果 A 是 B 的祖先,那么 A 在文档顺序上在 B 之前。

为什么不需要属性的顺序?

如果顺序很重要,则不应使用属性,这是 XML 的设计原则。这与对象建模的语义有关:属性表示对象的独立且正交的属性。就像形容词一样:说某物是一个大红色的盒子和说它是一个红色的大盒子的意思一样。如果不是(如“大白鲨”),那么形容词就不是名词的真正定语限定词,不应该在 XML 中建模为属性。

于 2013-07-19T08:45:28.423 回答
0

为了支持流式传输,文档顺序是“显而易见的”选择,“毫无疑问”,并且在大多数情况下对 XML 数据最有用。

但是,考虑到 XML 文档可以表示为树结构,并且 XPath 在该树上运行,XPath 结果的呈现顺序远非显而易见。树遍历是一个有趣的主题,它有许多变化,例如预排序、有序、呼吸优先和其他几个。(参见维基百科关于“树遍历”的其他来源)。

因此,尽管作者对 XML 的描述是正确的,但他掩盖了很多事情。特别是关于在树上运行的 XPath,OP 问题是完全有效的,并不明显,但已经得到很好的回答。

于 2021-02-21T15:14:47.267 回答