I didn't see a solution for the xml attribute namednodemap == null issues, so I decided to go ahead and fix it with some custom classes. I'm sure Google will get it fixed, but in case they don't in time for the ADC submission, some people might want a solution now. It's real quick&dirty, so if something doesn't work, that's why. Anyway, here you go...
Two things to note: 1. Keep the package names or it won't work. 2. I'm no longer using a factory to build the documentbuilder. You can probably change this, but it was simpler this way. Here's how you use it: DocumentBuilder builder = new CustomDocumentBuilder(); and then just use it like a normal DocumentBuilder. package android.xml.parsers; import org.w3c.dom.Document; import android.xml.dom.CustomDocument; import android.xml.dom.DOMImplementationImpl; public class CustomDocumentBuilder extends DocumentBuilderImpl { public CustomDocumentBuilder() { super(); } @Override public Document newDocument() { return new CustomDocument((DOMImplementationImpl)super.getDOMImplementation(), null, null, null); } } package android.xml.dom; import org.w3c.dom.DOMException; import org.w3c.dom.DocumentType; import org.w3c.dom.Element; public class CustomDocument extends DocumentImpl { public CustomDocument(DOMImplementationImpl impl, String namespaceURI, String qualifiedName, DocumentType doctype) { super(impl, namespaceURI, qualifiedName, doctype); } @Override public Element createElement(String tagName) throws DOMException { return new CustomElement(this, tagName); } @Override public Element createElementNS(String namespaceURI, String qualifiedName) throws DOMException { return new CustomElement(this, namespaceURI, qualifiedName); } } package android.xml.dom; import org.w3c.dom.Attr; import org.w3c.dom.DOMException; import org.w3c.dom.Document; import org.w3c.dom.NamedNodeMap; public class CustomElement extends ElementImpl { private NamedNodeMap mAttributes = new NamedNodeMapImpl(); public CustomElement(Document document, String namespaceURI, String qualifiedName) { super(document, namespaceURI, qualifiedName); } public CustomElement(Document document, String tagName) { super(document, tagName); } @Override public void setAttribute(String name, String value) throws DOMException { super.setAttribute(name, value); mAttributes.setNamedItem(getAttributeNode(name)); } @Override public Attr setAttributeNode(Attr newAttr) throws DOMException { mAttributes.setNamedItem(newAttr); return super.setAttributeNode(newAttr); } @Override public Attr setAttributeNodeNS(Attr newAttr) throws DOMException { mAttributes.setNamedItemNS(newAttr); return super.setAttributeNodeNS(newAttr); } @Override public void setAttributeNS(String namespaceURI, String qualifiedName, String value) throws DOMException { super.setAttributeNS(namespaceURI, qualifiedName, value); mAttributes.setNamedItemNS(getAttributeNodeNS(namespaceURI, qualifiedName)); } @Override public NamedNodeMap getAttributes() { return mAttributes; } @Override public boolean hasAttributes() { return mAttributes.getLength() > 0; } } On Mar 24, 1:12 pm, "Dan U." <[EMAIL PROTECTED]> wrote: > There definitely is an issue with attributes which won't let you > access them unless you know their names beforehand. If that isn't a > problem, then it's easy to write some code to give you back an Xml > string from a Document. > > On Mar 24, 12:09 pm, "Dexter's Brain" <[EMAIL PROTECTED]> wrote: > > > Hey Vishal, > > > This code will work with JDK.....But, currently, there is some problem > > with the android SDK. > > > The NamedNodeMap doesn't work....I dont know how did you test it on > > android. There is also a bug reported for this issue with the SDK.. I > > guess.....I tried using this, but it never worked for me....Lot of > > other people are also having this problem...... > > > Dexter. > > > vishal wrote: > > > I think i have a code for this which is general with any DOM document > > > type... > > > > Here initially you have to pass root element. Plz tell me if im > > > wrong.... and if errors in the code.. or any way to improve that > > > > private void addTagToTheFile(Element elem) throws IOException { > > > NamedNodeMap elemAttributes = elem.getAttributes(); > > > StringBuffer elemTagTowrite = new StringBuffer(); > > > Node attribute ; > > > elemTagTowrite.append("<"+elem.getTagName()); > > > if(elemAttributes!=null){ > > > > > > Log.i(elem.getTagName(),""+elemAttributes.getLength()); > > > int noOfAttributesInTag = > > > elemAttributes.getLength(); > > > for(int counter=0; counter < > > > noOfAttributesInTag; counter++){ > > > attribute = > > > elemAttributes.item(counter); > > > elemTagTowrite.append(" " + > > > attribute.getNodeName() + > > > " = \"" + > > > attribute.getNodeValue()+"\""); > > > } > > > } > > > elemTagTowrite.append(">"+'\n'); > > > outputFileWriter.write(elemTagTowrite.toString()); > > > NodeList childElements = elem.getChildNodes(); > > > int noOfchildElements = childElements.getLength(); > > > for(int counter=0; counter < noOfchildElements; > > > counter++){ > > > > if(childElements.item(counter).getClass().toString().contains("Element")) > > > { > > > Node childNode = > > > (Element)childElements.item(counter); > > > Element childElement = > > > (Element)childNode; > > > addTagToTheFile(childElement); > > > } > > > } > > > elemTagTowrite.delete(0, elemTagTowrite.length()); > > > elemTagTowrite.append("</" + elem.getTagName() + ">"); > > > outputFileWriter.write(elemTagTowrite.toString()); > > > outputFileWriter.write('\n'); > > > } > > > } > > > > On Mar 24, 9:59 pm, "Dexter's Brain" <[EMAIL PROTECTED]> wrote: > > > > Hello Vesin, > > > > > I can give you the code, but its not a generalized one. It will work > > > > only for my XML file format. I dont think it will help u. > > > > > On Mar 24, 8:32 pm, "Vesin Du�ko" <[EMAIL PROTECTED]> wrote: > > > > > > Can you share your code with as? > > > > > > On 16/03/2008, Dexter's Brain <[EMAIL PROTECTED]> wrote: > > > > > > > Hi Nitin, > > > > > > > I think this is not possible with the current SDK. We should wait > > > > > > till > > > > > > some more packages are added to the SDK. Till then, everything has > > > > > > to > > > > > > be done manually. > > > > > > After banging my head for hours, I wrote a method that would > > > > > > convert a > > > > > > DOM document object to an xml file. It wasn't very difficult > > > > > > though. > > > > > > > Dexter. > > > > > > -- --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Android Developers" group. To post to this group, send email to android-developers@googlegroups.com To unsubscribe from this group, send email to [EMAIL PROTECTED] Announcing the new M5 SDK! http://android-developers.blogspot.com/2008/02/android-sdk-m5-rc14-now-available.html For more options, visit this group at http://groups.google.com/group/android-developers?hl=en -~----------~----~----~----~------~----~------~--~---