XML DOM 获取节点值


XML(可扩展标记语言)是一种用于储存和传输数据的语言,它可以被解析并转换为其他形式的数据。DOM(文档对象模型)是用于处理XML文档的接口,它可以通过以任意方式访问XML文档中的内容。在这篇技术文档中,我们将详细介绍XML DOM获取节点值的方法。

在XML文档中,每一个元素都被标记为开始标记(<)和结束标记(>),并且包含在这两个标记之间的所有内容都被视为该元素的值。例如:

<book>
  <title>The Great Gatsby</title>
  <author>F. Scott Fitzgerald</author>
  <published>1925</published>
</book>

在这个例子中,<title>元素的值是"The Great Gatsby",<author>元素的值是"F. Scott Fitzgerald",<published>元素的值是"1925"。

要获取元素的值,我们可以使用DOM的nodeValue属性。nodeValue属性返回一个节点子树的值(如果该节点是一个文本节点,则返回节点的文本值)。例如:

const title = xmlDoc.getElementsByTagName("title")[0];
const titleValue = title.childNodes[0].nodeValue;
console.log(titleValue); // "The Great Gatsby"

首先,我们使用getElementsByTagName方法来获取<title>元素。之后,我们使用childNodes[0]获取该元素的第一个子节点,并使用nodeValue属性获取该子节点的值。

需要注意的是,如果给定的元素没有值,或者没有子节点,则nodeValue属性将返回null。在这种情况下,我们需要对nodeValue进行检查。例如:

const publisher = xmlDoc.getElementsByTagName("publisher")[0];
const publisherValue = publisher.childNodes[0] ? publisher.childNodes[0].nodeValue : "Unknown";
console.log(publisherValue); // "Unknown"

在这个例子中,我们检查了publisher元素的第一个子节点是否存在,如果不存在则将publisherValue设置为"Unknown"。

另一个需要注意的问题是,XML文档中的空格和换行符也会被视为节点。如果我们直接使用childNodes获取子节点,那么我们将得到一个包含所有节点的列表,包括文本节点和空白节点。例如:

<book>
  <title>
    The Great Gatsby
  </title>
  <author>
    F. Scott Fitzgerald
  </author>
  <published>
    1925
  </published>
</book>

在这个例子中,<title><author><published>元素之间都包含了空白节点。如果我们不注意这些节点,我们可能会得到错误的结果。为了避免这种情况,我们需要使用nodeValue.trim()方法将文本节点的文本值去掉空格和换行符。例如:

const title = xmlDoc.getElementsByTagName("title")[0];
const titleValue = title.childNodes[1].nodeValue.trim();
console.log(titleValue); // "The Great Gatsby"

在这个例子中,我们使用了childNodes[1]获取<title>元素的第二个子节点,即文本节点。

总之,XML DOM获取节点值的方法需要注意节点的类型和文本值的格式。通过使用nodeValue属性和nodeValue.trim()方法,我们可以准确地获取XML文档中元素的值。