|
How you access elements from document with namespaces |
|
|
Currently allmost each XML document use namspaces in its contents. This prevents name
conflicts in the case when multiple document types are used. DOM provides special
methods for extracting XML-element and atttributes by their fully qualified names,i.e.
with namespaces supplied.
During namespace processing DOM operates on vendor URL. The sample below shows an
example of namespace usage:
This is a sample XML using namespaces:
<?xml version="1.0"?>
<!DOCTYPE myns:purchase-order [
<!ELEMENT myns:purchase-order (myns:purchased-by, myns:order-items)>
<!ATTLIST myns:purchase-order
myns:date CDATA #REQUIRED
myns:number CDATA #REQUIRED
xmlns:myns CDATA #REQUIRED
>
<!ELEMENT pmyns:purchased-by (myns:address)>
<!ATTLIST myns:purchased-by
myns:name CDATA #REQUIRED
>
<!ELEMENT myns:address (#PCDATA)>
<!ELEMENT myns:order-items (myns:item+)>
<!ELEMENT myns:item EMPTY>
<!ATTLIST myns:item
myns:code CDATA #REQUIRED
myns:type CDATA #REQUIRED
myns:label CDATA #REQUIRED
>
]>
<myns:purchase-order xmlns:myns="http://www.my-company.com"
myns:date="2005-10-31" myns:number="12345">
<myns:purchased-by myns:name="My name">
<myns:address>My address</myns:address>
</myns:purchased-by>
<myns:order-items>
<!--
here is an example of empty element
i.e. containing no nested elements
-->
<myns:item myns:code="687" myns:type="CD"
myns:label="Some music" />
<myns:item myns:code="129851" myns:type="DVD"
myns:label="Some video"/>
</myns:order-items>
</myns:purchase-order>
This is a Java code refering namespaces:
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import org.w3c.dom.Attr;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.NodeList;
/**
* This sample program using fully qualified names while
* accessing the contents of DOM-document.
*/
public class Test {
public static void main(String[] args) {
try {
// load the document from a file:
DocumentBuilderFactory factory =
DocumentBuilderFactory.newInstance();
factory.setNamespaceAware(true);
factory.setValidating(true);
DocumentBuilder loader = factory.newDocumentBuilder();
Document document = loader.parse("sample.xml");
// here is our vendor URL used in namepace-related functions:
String docNS = "http://www.my-company.com";
Element order = document.getDocumentElement();
// here we get the attribute with namespace defined:
Attr date = order.getAttributeNodeNS(docNS, "date");
// .. do something ...
// here we get the attribute with namespace defined:
NodeList children = order.getElementsByTagNameNS(docNS, "item");
// .. do something ...
} catch (Exception ex) {
ex.printStackTrace();
}
}
}
|
Related Tips
|
Page 1 of 0 ( 0 comments )
You can share your information about this topic using the form below!
Please do not post your questions with this form! Thanks.