2014-10-16 44 views
0

使用Java DOM我試圖爲屬性名稱前沒有名稱空間的元素設置屬性。使用Java設置不帶前綴的屬性DOM

所以,我需要的是:

<documentObject xmlns="http://www.myschema.com"> 
    <element1 attr1="value">foo</element1> 
</documentObject> 

如果我嘗試如下element1.setAttributeNS("http://www.myschema.com", "attr1", value);我得到一個空的xmlns標籤和additionaly用類似下面的前綴的xmlns設置屬性:

<element1 attr1="value" xmlns="" xmlns:ns3="http://www.myschema.com">foo</element1> 

如果我嘗試將屬性設置爲如下element1.setAttribute("xmlns:attr1", value);,我會在我的屬性名稱前獲得前綴(xmlns),如下所示:

<element1 xmlns:attr1="value">foo</element1> 

至於進一步的信息創建我的要素如下:

Element element = dom.createElementNS("http://www.myschema.com", elemName); 
element.appendChild(dom.createCDATASection("foo"); 
xmlElement.appendChild(element); 

回答

0

讓我們來看看你的期望再次輸出:

<documentObject xmlns="http://www.myschema.com"> 
    <element1 attr1="value">foo</element1> 
</documentObject> 

在這份文件中,下面的語句是真實的:

  1. documentObjectelement1都在http://www.myschema.com命名空間。

  2. 屬性attr1不在任何命名空間中。

雖然元素他們的名字都沒有前綴將要以什麼默認的命名空間是有效,屬性他們的名字都沒有前綴不在任何名稱空間。請參閱spec

默認命名空間聲明不直接應用於屬性名稱;前綴屬性的解釋是由它們出現的元素決定的。

因此獲得你想要的輸出,你應該能夠只是做:

element1.setAttribute("attr1", value); 

當然,這一切都取決於所需的輸出是正確的。如果真的attr1必須位於命名空間中,那麼您所需的輸出不正確。

0

下面的代碼將產生輸出

<?xml version="1.0" encoding="UTF-8"?> 
<documentObject xmlns="http://www.myschema.com"> 
    <element1 attr1="value">foo</element1> 
</documentObject> 

的Java代碼

import java.io.File; 
import javax.xml.parsers.DocumentBuilder; 
import javax.xml.parsers.DocumentBuilderFactory; 
import javax.xml.parsers.ParserConfigurationException; 
import javax.xml.transform.Transformer; 
import javax.xml.transform.TransformerException; 
import javax.xml.transform.TransformerFactory; 
import javax.xml.transform.dom.DOMSource; 
import javax.xml.transform.stream.StreamResult; 
import org.w3c.dom.Attr; 
import org.w3c.dom.Document; 
import org.w3c.dom.Element; 

public class XMLTest { 

    public static void main(String[] args) throws ParserConfigurationException, TransformerException { 

     DocumentBuilderFactory docFactory = DocumentBuilderFactory.newInstance(); 
     DocumentBuilder docBuilder = docFactory.newDocumentBuilder(); 

     Document doc = docBuilder.newDocument(); 

     Element element = doc.createElementNS("http://www.myschema.com", "documentObject"); 
     doc.appendChild(element); 

     Element element1 = doc.createElement("element1"); 
     element.appendChild(element1); 

     element1.appendChild(doc.createTextNode("foo")); 
     Attr attr = doc.createAttribute("attr1"); 
     attr.setValue("value"); 
     element1.setAttributeNode(attr); 

     element.appendChild(element1); 

     // write the content into xml file 
     TransformerFactory transformerFactory = TransformerFactory.newInstance(); 
     Transformer transformer = transformerFactory.newTransformer(); 
     DOMSource source = new DOMSource(doc); 
     StreamResult result = new StreamResult(new File("testfile.xml")); 
     transformer.transform(source, result); 
     System.out.println("File saved!"); 
    } 
} 
+0

在這種情況下我得到的結果在下面的格式: <元素1 attR1位= 「值」 的xmlns = 「」 的xmlns:NS3 = 「http://www.myschema.com」> FOO – BenTreeser 2014-10-16 14:02:14

+0

我已經加入完整的樣品。嘗試這個! – 2014-10-16 14:10:52