考虑这段代码,我们在其中:
1)构建一个简单的XML文档;
2)克隆其中一个节点;
3)使用xpath搜索节点a
中的属性in
:
@Test
public void lookupInClonedNode() throws Exception {
String xmlString = "<?xml version=\"1.0\" encoding=\"utf-8\"?><out a='1'><in a='2'/></out>";
Document document = DocumentBuilderFactory
.newInstance()
.newDocumentBuilder()
.parse(new InputSource(new StringReader(xmlString)));
Node cloneOfOut = document.getFirstChild().cloneNode(true);
String query = "//in/@a";
Node attributeA = (Node) XPathFactory
.newInstance()
.newXPath()
.evaluate(
query,
cloneOfOut,
XPathConstants.NODE
);
assertNotNull(attributeA);
}
此测试失败。但是,如果您不克隆节点,但使用现有节点,则它会通过。替换行:
Node cloneOfOut = document.getFirstChild().cloneNode(true);
行:
Node cloneOfOut = document.getFirstChild();
查看测试通过。
我有两个问题:
/
或//
开头的那个?)答案 0 :(得分:1)
A /本身选择包含上下文节点的文档的根节点。
但是在DOM中,克隆节点没有父节点,因此不包含在任何文档中。
Document
并将节点导入其中。