XML中属性的name->值对是否被认为是两个节点,由XPATH解释?

时间:2011-12-19 21:38:32

标签: xml xpath datamodel xmlnode

以下文章http://docs.oracle.com/javaee/1.4/tutorial/doc/JAXPXSLT3.html说XPATH认为以下是节点:

  • 元素
  • 文字
  • 属性
  • 评论
  • 处理说明
  • 命名空间

我想知道的是属性'id'及其值'2'是否被认为是两个不同的节点?例如<name id="2">text</name>

或者文本节点只是元素之间的'数据'http://www.w3.org/XML/Datamodel.html?我的直觉告诉我XPATH会考虑在这个例子中有4个节点 - 'name'元素,属性'id'是文本值'2'和文本值'text'。

2 个答案:

答案 0 :(得分:2)

属性节点具有名称和值。它们不是单独的节点。以下XML:

<name id="2">text</name>

...代表三个节点:1)名称为name的元素; 2)name的子节点,它是文本节点; 3)名称为id且值为2的属性节点。

来自the spec

  

属性节点具有扩展名和字符串值。

后来:

  

属性节点具有字符串值。字符串值是   XML Recommendation [XML]指定的标准化值。一个   标准化值为零长度字符串的属性不是   特别处理:它产生一个属性节点,其字符串值   是一个零长度字符串。

答案 1 :(得分:1)

属性节点的string value只是一个字符串 - 它本身不是节点

不应将节点的任何字符串值与任何文本节点混淆。文本节点是元素节点的子节点,它本身具有字符串值。

文本节点的字符串值通常不是我们在XML文档序列化中呈现的字符串,例如:

<t>M &amp; M</t>

/*/text()选择的文字节点的字符串值不是"M &amp; M",而是:

M & M