我有使用支持名稱空間的XPath搜索XML文檔(org.w3c.dom)的代碼。我在向文檔中添加元素然後能夠通過XPath找到它們時遇到了問題。將元素添加到文檔並使用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);
如果我運行鍼對該文件沒有找到任何上述的XPath。但是,如果我重新解析XPath的工作文檔。
我錯過了什麼?
EDIT
正如我更新我添加命名空間的文件,如果它不存在,(它通常沒有)的過程的一部分。
Element rootElement = doc.getDocumentElement();
NamedNodeMap map = rootElement.getAttributes();
if (map.getNamedItem("xmlns:ns3") == null)
rootElement.setAttributeNS("http://www.w3.org/2000/xmlns", "xmlns:ns3",
"urn:exo:/path/to/xsd/in/jar");
我已經嘗試過幾種不同的上述方法,但沒有運氣。 '(「urn:ns3」,「ns3:element3」)','(「xmlns:ns3」,「ns3:element3」)'。請參閱關於添加NS的帖子編輯。當我做了上述任何一個元素的形式是'ns3:element xmlns:ns3 =「urn:ns3」... />' –
@JohnB從你編輯的代碼中我會認爲'createElementNS (「urn:exo:/ path/to/xsd/in/jar」,「ns3:element3」)'就是你要找的東西。 –
我的朋友,你搖滾!謝謝! –