Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/335.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 将元素添加到文档并使用XPath查找_Java_Xml_Xpath_Domdocument - Fatal编程技术网

Java 将元素添加到文档并使用XPath查找

Java 将元素添加到文档并使用XPath查找,java,xml,xpath,domdocument,Java,Xml,Xpath,Domdocument,我有使用名称空间感知XPath搜索XML文档(org.w3c.dom)的代码。我在向文档中添加元素,然后通过XPath查找元素时遇到问题 如果添加元素并使用XPath进行搜索,则不会得到任何结果。但是,如果我将文档转换为字符串并重新分析为文档,XPath会找到元素 我创建XPath如下所示: String myXPathQuery = "/ns1:element1/ns2:element2/ns3:element3"; XPathFactory fact = XPathFactory.newIn

我有使用名称空间感知XPath搜索XML文档(org.w3c.dom)的代码。我在向文档中添加元素,然后通过XPath查找元素时遇到问题

如果添加元素并使用XPath进行搜索,则不会得到任何结果。但是,如果我将文档转换为字符串并重新分析为文档,XPath会找到元素

我创建XPath如下所示:

String myXPathQuery = "/ns1:element1/ns2:element2/ns3:element3";
XPathFactory fact = XPathFactory.newInstance();
XPath xpath = fact.newXPath();
xpath.setNamespaceContext(myNSContext);
XPathExpression myXPathExpression = xpath.compile(myXPathQuery);
Document doc = ...;
Element elementToWhichToAdd = ...; // this is "ns2:element2"

Element newElement = doc.createElement("ns3:element3");
elementToWhichToAdd.appendChild(newElement);
我加入的内容如下:

String myXPathQuery = "/ns1:element1/ns2:element2/ns3:element3";
XPathFactory fact = XPathFactory.newInstance();
XPath xpath = fact.newXPath();
xpath.setNamespaceContext(myNSContext);
XPathExpression myXPathExpression = xpath.compile(myXPathQuery);
Document doc = ...;
Element elementToWhichToAdd = ...; // this is "ns2:element2"

Element newElement = doc.createElement("ns3:element3");
elementToWhichToAdd.appendChild(newElement);
如果我对这个文档运行上面的XPath,它找不到任何东西。但是如果我重新分析文档,XPath就会工作

我错过了什么

编辑

作为更新文档过程的一部分,如果名称空间不存在(通常不存在),则添加名称空间

createElement
是一个不知道名称空间的DOM级别1方法,表示它返回

一个新的
元素
对象,其
节点名
属性设置为
标记名
本地名
前缀
,以及
名称空间URI
设置为

您需要使用DOM级别2来创建新元素


(或者,无论与
ns3
相对应的名称空间URI是什么,您都可以使用
myNSContext.getNamespaceURI(“ns3”)
)直接从名称空间上下文中获取它。)

我尝试了上述几种变体,但没有成功<代码>(“urn:ns3”、“ns3:element3”),
(“xmlns:ns3”、“ns3:element3”)
。请参阅关于添加NSs的后期编辑。当我做上述任何一项时,元素的形式是
@JohnB,从您在中编辑的代码中,我认为
createElements(“urn:exo:/path/to/xsd/in/jar”,“ns3:element3”)
将是您所寻找的。我的朋友,您真是棒极了!非常感谢。
Element newElement = doc.createElementNS("urn:exo:/path/to/xsd/in/jar", "ns3:element3");