Re: Xmlbeans is able to retrieve extra attribute from xml ?

Sebastien Dionne <[email protected]>
Newsgroups gmane.text.xml.xmlbeans.user
Message-ID <[email protected]>
I got something working.

It's not perfect.. but for a sample that's fine.


This code will list the elements that are not in the schema


package ca.sebastiendionne.upnp.device;

import java.io.File;

import org.apache.xmlbeans.QNameSet;
import org.apache.xmlbeans.SchemaProperty;
import org.apache.xmlbeans.SchemaType;
import org.apache.xmlbeans.XmlObject;
import org.apache.xmlbeans.impl.values.XmlAnyTypeImpl;
import org.upnp.schemas.device_1_0.RootDocument;
import org.w3c.dom.Attr;
import org.w3c.dom.NamedNodeMap;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;

public class ExtraTagsDeviceTest {

    public static void main(String[] args) throws Exception {

        ExtraTagsDeviceTest mod = new ExtraTagsDeviceTest();

        mod.go();

    }

    public void browse(XmlObject xo, NodeList childList) {

        for (int i = 0; i < childList.getLength(); i++) {
            Node node = childList.item(i);
            if (node.getNodeType() == Node.ELEMENT_NODE) {
                boolean isInXsd = isAttributeInSchema(xo,
node.getLocalName());

                if (!isInXsd) {
                    System.out.println("element name=" + node.getLocalName()
+ "  IS IN SCHEMA=" + isInXsd);

                    System.out.println("Node Name: " + node.getNodeName());
                    System.out.println("Node NS: " + node.getNamespaceURI()
+ "-" + node.getNodeValue());
                    System.out.println("Attributes: ");
                    NamedNodeMap nnm = node.getAttributes();
                    if (nnm != null) {
                        int len = nnm.getLength();
                        Attr attr;
                        for (int j = 0; j < len; j++) {
                            attr = (Attr) nnm.item(j);
                            System.out.println("\t " + attr.getNodeName() +
"=\"" + attr.getNodeValue() + '"');
                        }
                    }
                    System.out.println("End of Attributes");

                    NodeList list = node.getChildNodes();

                    if (list.getLength() == 1) {
                        System.out.println("Value=" +
list.item(0).getNodeValue());
                    }

                }

            }
        }
    }

    public boolean editExistingDocWithDOM(XmlObject xo) {

        NodeList childList = xo.getDomNode().getChildNodes();

        browse(xo, childList);

        return true;
    }

    private void go() throws Exception {

        RootDocument atd = RootDocument.Factory.parse(new
File("./src/test/resources/device2.xml"));

        editExistingDocWithDOM(atd.getRoot().getDevice());

    }

    private static boolean isAttributeInSchema(XmlObject xo, String name) {

        boolean ret = false;

        SchemaType xoSt = xo.schemaType();

        SchemaProperty[] xoSps = xoSt.getElementProperties();

        if (xoSps.length > 0) {
            for (int i = 0; i < xoSps.length; i++) {
                SchemaProperty xoSp = xoSps[i];

                if (xoSp.getName().getLocalPart().equals(name)) {
                    ret = true;
                    break;
                }
            }
        }

        return ret;

    }

}


-------------
A+

Sébastien.

Vous pouvez me suivre sur Twitter / You can follow me on Twitter :
http://twitter.com/survivant
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.