XML 中 TextContent 和属性值的区别

Byt*_*ter 2 java xml attributes

属性getTextContent()getValue()属性之间有区别吗?

在以下情况下,它会将相同的内容打印到控制台中。我已经发现getNodeValue()并且getValue是相同的(根据http://docs.oracle.com/javase/7/docs/api/org/w3c/dom/Node.html#getNodeValue())。

XML:

<Request w="4.2">
Run Code Online (Sandbox Code Playgroud)

代码:

getString("Request", rootElement);
Run Code Online (Sandbox Code Playgroud)

void printAtt(String tagName, Element element) {
        NodeList list = element.getElementsByTagName(tagName);
        for (int i = 0; i < list.getLength(); i++) {
            Node node = list.item(i);
            Element nodeElement = (Element) node;
            Attr attribute = nodeElement.getAttributeNode("w");
            System.out.println("ATTR NAME: " + attribute.getName());
            System.out.println("ATTR TEXT CONTENT: " + attribute.getTextContent());
            System.out.println("ATTR VALUE: " + attribute.getValue());
            System.out.println("ATTR NODE VALUE: " + attribute.getNodeValue());
        }
}
Run Code Online (Sandbox Code Playgroud)

输出是:

ATTR NAME: w
ATTR TEXT CONTENT: 4.2
ATTR VALUE: 4.2
ATTR NODE VALUE: 4.2
Run Code Online (Sandbox Code Playgroud)

Buh*_*ndi 5

有一个重要的区别。getTextContent()将其串联节点的所有文本内容它的后代(如果有的话),并返回值,而getNodeValue()会返回其当前节点的值。

Javadoc 指出getNodeValue()

此节点的值,取决于其类型;见上表。当它定义为空时,设置它没有任何影响,包括节点是否为只读。

getTextContent()

此属性返回此节点及其后代的文本内容。当它被定义为空时,设置它没有任何作用。在设置时,此节点可能具有的任何可能的子节点都将被删除,如果新字符串不为空或为空,则替换为包含此属性设置为的字符串的单个 Text 节点。在获取时,不执行序列化,返回的字符串不包含任何标记。不执行空白规范化并且返回的字符串不包含元素内容中的空白(请参阅属性 Text.isElementContentWhitespace)。同样,在设置时,也不进行解析,将输入的字符串视为纯文本内容。返回的字符串由该节点的文本内容组成,具体取决于其类型。

对于 an ATTRIBUTE_NODE,两个函数的值相同,因为属性没有后代,因此您会收到类似的结果。