Java Tutorial/XML/Attribute

Материал из Java эксперт
Перейти к: навигация, поиск

Accessing attributes of an element

   <source lang="java">

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.NamedNodeMap; public class Main {

 public static void main(String[] argv) throws Exception {
   DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
   DocumentBuilder loader = factory.newDocumentBuilder();
   Document document = loader.parse("sample.xml");
   Element purchaseOrder = document.getDocumentElement();
   Attr orderDate = purchaseOrder.getAttributeNode("date");
   System.out.println(orderDate.getValue());
   NamedNodeMap attrs = purchaseOrder.getAttributes();
   int attrsCount = attrs.getLength();
   for (int i = 0; i < attrsCount; i++) {
     Attr item = (Attr) attrs.item(i);
     System.out.println(""" + item.getName() + "" = "" + item.getValue() + """);
   }
 }

}</source>





Adding and Removing an Attribute in a DOM Element

   <source lang="java">

import java.io.File; import javax.xml.parsers.DocumentBuilderFactory; import org.w3c.dom.Document; import org.w3c.dom.Element; public class Main {

 public static void main(String[] argv) throws Exception {
   DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
   factory.setValidating(true);
   factory.setExpandEntityReferences(false);
   Document doc = factory.newDocumentBuilder().parse(new File("filename"));
   Element element = doc.getElementById("key1");
   element.setAttribute("newAttrName", "attrValue");
   element.setAttribute("newAttrName", "<>&\""");
   element.removeAttribute("value");
   boolean has = element.hasAttribute("value"); // true
   String attrValue = element.getAttribute("value"); // mydefault
 }

}</source>





Determining If an Attribute Was Supplied in a DOM Element

   <source lang="java">

import java.io.File; import javax.xml.parsers.DocumentBuilderFactory; import org.w3c.dom.Attr; import org.w3c.dom.Document; import org.w3c.dom.Element; public class Main {

 public static void main(String[] argv) throws Exception{
   DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
   factory.setValidating(true);
   factory.setExpandEntityReferences(false);
   Document doc = factory.newDocumentBuilder().parse(new File("filename"));
   Element element = doc.getElementById("key1");
   Attr attr = (Attr) element.getAttributeNode("attrName");
   boolean wasSpecified = attr != null && attr.getSpecified();
 }

}</source>





Extracting attribute values from XML elements

   <source lang="java">

import javax.xml.parsers.SAXParser; import javax.xml.parsers.SAXParserFactory; import org.xml.sax.Attributes; import org.xml.sax.SAXException; import org.xml.sax.helpers.DefaultHandler; public class Main {

 public static void main(String[] argv) throws Exception {
   SAXParserFactory factory = SAXParserFactory.newInstance();
   SAXParser parser = factory.newSAXParser();
   SaxHandler handler = new SaxHandler();
   parser.parse("sample.xml", handler);
 }

} class SaxHandler extends DefaultHandler {

 public void startElement(String uri, String localName, String qName, Attributes attrs)
     throws SAXException {
   if (qName.equals("order")) {
     String date = attrs.getValue("date");
     String number = attrs.getValue("number");
     System.out.println("Order #" + number + " date is "" + date + """);
   }
 }

}</source>





Getting and Setting an Attribute in a DOM Element

   <source lang="java">

import java.io.File; import javax.xml.parsers.DocumentBuilderFactory; import org.w3c.dom.Document; import org.w3c.dom.Element; public class Main {

 public static void main(String[] argv) throws Exception {
   DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
   factory.setValidating(true);
   factory.setExpandEntityReferences(false);
   Document doc = factory.newDocumentBuilder().parse(new File("filename"));
   Element element = doc.getElementById("key1");
   boolean has = element.hasAttribute("value"); 
   String attrValue = element.getAttribute("value"); 
   element.setAttribute("value", "newValue1");
   element = doc.getElementById("key2");
   has = element.hasAttribute("value"); 
   attrValue = element.getAttribute("value"); 
   element.setAttribute("value", "a<\""&>z");
 }

}</source>





Listing All the Attributes of a DOM Element

   <source lang="java">

import java.io.File; import javax.xml.parsers.DocumentBuilderFactory; import org.w3c.dom.Attr; import org.w3c.dom.Document; import org.w3c.dom.Element; import org.w3c.dom.NamedNodeMap; public class Main {

 public static void main(String[] argv) throws Exception{
   DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
   factory.setValidating(true);
   factory.setExpandEntityReferences(false);
   Document doc = factory.newDocumentBuilder().parse(new File("filename"));
   Element element = doc.getElementById("key1");
   NamedNodeMap attrs = element.getAttributes();
   int numAttrs = attrs.getLength();
   for (int i = 0; i < numAttrs; i++) {
     Attr attr = (Attr) attrs.item(i);
     String attrName = attr.getNodeName();
     String attrValue = attr.getNodeValue();
   }
 }

}</source>





Remove all attributes by first making a copy of the attribute names and then using the list to remove the attributes:

   <source lang="java">

import java.io.File; import javax.xml.parsers.DocumentBuilderFactory; import org.w3c.dom.Document; import org.w3c.dom.Element; import org.w3c.dom.NamedNodeMap; public class Main {

 public static void main(String[] argv) throws Exception{
   DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
   factory.setValidating(true);
   factory.setExpandEntityReferences(false);
   Document doc = factory.newDocumentBuilder().parse(new File("filename"));
   Element element = doc.getElementById("key1");
   NamedNodeMap attrs = element.getAttributes();
   String[] names = new String[attrs.getLength()];
   for (int i = 0; i < names.length; i++) {
     names[i] = attrs.item(i).getNodeName();
   }
   for (int i = 0; i < names.length; i++) {
     attrs.removeNamedItem(names[i]);
   }
 }

}</source>





Removing All the Attributes in a DOM Element

   <source lang="java">

import java.io.File; import javax.xml.parsers.DocumentBuilderFactory; import org.w3c.dom.Document; import org.w3c.dom.Element; import org.w3c.dom.NamedNodeMap; public class Main {

 public static void main(String[] argv) throws Exception{
   DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
   factory.setValidating(true);
   factory.setExpandEntityReferences(false);
   Document doc = factory.newDocumentBuilder().parse(new File("filename"));
   Element element = doc.getElementById("key1");
   NamedNodeMap attrs = element.getAttributes();
   while (attrs.getLength() > 0) {
     attrs.removeNamedItem(attrs.item(0).getNodeName());
   }
 }

}</source>