Java 将元素添加到文档并使用XPath查找
我有使用名称空间感知XPath搜索XML文档(org.w3c.dom)的代码。我在向文档中添加元素,然后通过XPath查找元素时遇到问题 如果添加元素并使用XPath进行搜索,则不会得到任何结果。但是,如果我将文档转换为字符串并重新分析为文档,XPath会找到元素 我创建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
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");