TextContent与XML中属性值的区别

时间:2015-06-22 16:36:25

标签: 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">

代码:

getString("Request", rootElement);

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());
        }
}

输出结果为:

ATTR NAME: w
ATTR TEXT CONTENT: 4.2
ATTR VALUE: 4.2
ATTR NODE VALUE: 4.2

1 个答案:

答案 0 :(得分:2)

有一个至关重要的区别。 getTextContent()将连接其节点其后代(如果有)的所有文本内容,并返回值,而getNodeValue()将返回其当前节点的值。

Javadoc声明,getNodeValue()

  

此节点的值,具体取决于其类型;见上表。   当它被定义为null时,设置它无效,包括if   该节点是只读的。

getTextContent()

  

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

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