用JAXP dom 構建帶名稱空間的xml文檔
?網上好象關于如何構建支持名稱空間的xml文檔的資料似乎并不多 剛好啃過一下這方面的類容 也就借
Blog貼點,權當自己做了個筆記 .
?先簡要介紹一下用到的類及其方法,更詳細的介紹只有看java api文檔了?????
DocumentBuilderFactory創建DOM解析器的工廠 調用其newInstance()方法實例化 然后用該實例創建DocumentBuilder
實例 該實例表示一個dom解析器????????
?DocumentBuilderFactory.setNamespaceAware(true); 提供對 XML 名稱空間的支持。
DOMImplementation? 允許用戶用根Element的限定名稱和XML命名空間創建新Document
Document createDocument(String namespaceURI,String qualifiedName,???? DocumentType doctype)throws DOMException創建具有文檔元素的指定類型的 DOM Document 對象。
? 參數:? namespaceURI - 要創建的文檔元素的名稱空間 URI 或 null。? qualifiedName - 要創建的文檔元素的限定名稱或 null。
? doctype - 要創建的文檔的類型或 null。當 doctype 不是 null 時,其 Node.ownerDocument 屬性將被設置為正在創建的文檔。
返回:具有文檔元素的新 Document 對象。如果 NamespaceURI、qualifiedName 和 doctype 為 null,則返回的 Document 為空的,不帶有文檔元素
Element getDocumentElement()這是一種便捷屬性,該屬性允許直接訪問文檔的文檔元素的子節點。
Element createElementNS(String namespaceURI, String qualifiedName)? throws DOMException創建給定的限定名稱和名稱空間 URI 的元素。依據 [XML Namespaces],如果應用程序不希望使用名稱空間,則必須將 null 作為方法的 namespaceURI 參數的值。
參數:namespaceURI - 要創建的元素的名稱空間 URI。qualifiedName - 要實例化的元素類型的限定名稱。 返回:具有以下屬性的新 Element 對象: 屬性 值 Node.nodeName qualifiedName Node.namespaceURI namespaceURI Node.prefix 前綴,從 qualifiedName 中提取的;如果沒有前綴,則為 null? Node.localName 本地名稱,從 qualifiedName 提取的 Element.tagName qualifiedName
Document對象的createAttributeNS Attr createAttributeNS(String namespaceURI,?????? String qualifiedName)?? throws DOMException創建給定的限定名稱和名稱空間 URI 的屬性。對于每個 [XML Namespaces],如果應用程序希望沒有名稱空間,則它們必須將 null 作為方法的 namespaceURI 參數的值。 參數:namespaceURI - 要創建的屬性的名稱空間 URI。qualifiedName - 要實例化的屬性的限定名稱。
Element對象的setAttributeNS方法 void setAttributeNS(String namespaceURI, String qualifiedName,??? String value)??????????????? throws DOMException?? throws DOMException 添加新屬性 namespaceURI - 要創建或更改的屬性的名稱空間 URI。qualifiedName - 要創建或更改的屬性的限定名稱。value - 以字符串形式設置的值。
import javax.xml.parsers.*;
import org.w3c.dom.*;
import javax.xml.transform.*;
import javax.xml.transform.stream.*;
import javax.xml.transform.dom.*;
class BuilderXML {
??? public final static String SOAP_NS =
??????????? "??? public final static String MH_NS =
??????????? "??? public final static String XSD_NS = "??? public final static String XSI_NS =
??????????? "??? public static void main(String[] args) throws Exception {
??????? BuilderXML builderxml = new BuilderXML();
??????? DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
???????
????
??????? factory.setNamespaceAware(true);
??????? DocumentBuilder builder = factory.newDocumentBuilder();
??????
??????? DOMImplementation doIml = builder.getDOMImplementation();
?
??????? Document doc = doIml.createDocument(SOAP_NS, "soap:Envelop", null);
???????
???????
??????? Element root = doc.getDocumentElement();
??????? root.setAttribute("xmlns:soap", SOAP_NS);
??????? root.setAttribute("xmlns:mh", MH_NS);
??????? root.setAttribute("xmlns:xsd", XSD_NS);
??????? root.setAttribute("xmlns:xsi", XSI_NS);
???????
??????? Element body = doc.createElementNS(SOAP_NS, "soap:Body");
??????? root.appendChild(body);
??????? Element getBookPrice = doc.createElementNS(MH_NS, "mh:getBookPrice");
??????? body.appendChild(getBookPrice);
??????? Element isbn = doc.createElementNS(MH_NS, "isbn");
??????? body.appendChild(isbn);
??????? Attr typeAttr = doc.createAttributeNS(XSI_NS, "xsi:type"); //attr 只能賦給element
??????? typeAttr.setValue("xsd:string");
??????? isbn.setAttributeNodeNS(typeAttr);
??????? isbn.setAttributeNS( MH_NS,"mh:tt","tt");
??????? //創建CDATA段
??????? CDATASection cdata=doc.createCDATASection("<hc>ttt</hc>");
????????? isbn.appendChild(cdata);
???????? // 創建文本
????????? Text tt = doc.createTextNode("made? two by hc");
????????? isbn.setNodeValue("made by hechang");
????????? isbn.appendChild(tt);
??????? Text text = doc.createTextNode("0311111");
??????? body.appendChild(text);
???????? //創建注釋
??????? Comment comment = doc.createComment(" written by hc ");
??????? doc.insertBefore(comment,root);
???????? //創建轉換器并將xml文檔輸出到輸出流 如果輸出流是一個輸出文件流,則生成一個文件
??????? Transformer t = TransformerFactory.newInstance().newTransformer();
??????? t.setOutputProperty("indent", "yes"); //設置空白輸出
??????? t.transform(new DOMSource(doc),
??????????????????? new StreamResult(System.out));
??? }
}
程序輸出:
<soap:Envelop xmlns:soap="xmlns:mh="?xmlns:xsd="?xmlns:xsi="<soap:Body>
<mh:getBookPrice/>
<isbn mh:tt="tt" xsi:type="xsd:string" xmlns="? two by hechang</isbn>0311111</soap:Body>
</soap:Envelop>
??????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????? 歡迎加入QQ群:30406099?
posted on 2006-07-03 09:10 傻 瓜 閱讀(1934) 評論(0) 編輯 收藏 所屬分類: jaxp xml