2

Could somebody help me with this. I would like to know how to read this example as string? I know how to read first one but don't know how to read them all

<Tr rn=\"000000000000000\" vr=\"T\" sSpre=\"S\" reg=\"P\" dSpre=\"2000-01-01\" dOdprt=\"2000-01-01\" iban=\"SI00\" eno=\"R\" vir=\"B\" maticnaPps=\"0000000000\"><Imetnik davcna=\"00000000\" matSub=\"0000000000\" drz=\"705\"><PopolnoIme>UNKNOWN</PopolnoIme><KratkoIme>UNKNOWN</KratkoIme><Naslov sifTipNaslova=\"00\" sifObcina=\"000\" sifPosta=\"0000\" sifUlica=\"0000\" sifNaselje=\"000\" stHisna=\"000\" sifHsmid=\"00000000\"><Obcina>UNKNOWN</Obcina><Posta>UNKNOWN</Posta><Ulica>UNKNOWN</Ulica><Naselje>UNKNOWN</Naselje></Naslov></Imetnik></Tr>
5
  • 3
    What do you mean by "read as a string"? As in "this content is in a .xml file, I want to read it using java and put it in a string"? BTW, looks like the example itself, with all the ` \" ` IS a java string Commented Oct 12, 2010 at 7:20
  • Do you want to read the xml as a string or the attribute values of Tr element as a string? Commented Oct 12, 2010 at 7:21
  • 2
    I think he/she means to parse an XML document from a String object. Commented Oct 12, 2010 at 7:47
  • In this case it is a duplicate of stackoverflow.com/questions/729621/… Commented Oct 12, 2010 at 7:53
  • At the end of the day, all you really need is Document document = builder.parse(new InputSource(new StringReader(xmlString)));. Commented Jul 21, 2015 at 15:20

4 Answers 4

1

Maybe this is what you are looking for? Example here: http://ideone.com/N4jIO

import java.io.ByteArrayInputStream;
import java.io.IOException;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;

import org.w3c.dom.Document;
import org.w3c.dom.NamedNodeMap;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import org.xml.sax.SAXException;


public class Main {

    public static void main(String... args) throws IOException, SAXException, ParserConfigurationException {

        String xml = "<Tr rn=\"000000000000000\" vr=\"T\" sSpre=\"S\" reg=\"P\" dSpre=\"2000-01-01\" dOdprt=\"2000-01-01\" iban=\"SI00\" eno=\"R\" vir=\"B\" maticnaPps=\"0000000000\"><Imetnik davcna=\"00000000\" matSub=\"0000000000\" drz=\"705\"><PopolnoIme>UNKNOWN</PopolnoIme><KratkoIme>UNKNOWN</KratkoIme><Naslov sifTipNaslova=\"00\" sifObcina=\"000\" sifPosta=\"0000\" sifUlica=\"0000\" sifNaselje=\"000\" stHisna=\"000\" sifHsmid=\"00000000\"><Obcina>UNKNOWN</Obcina><Posta>UNKNOWN</Posta><Ulica>UNKNOWN</Ulica><Naselje>UNKNOWN</Naselje></Naslov></Imetnik></Tr>";

        DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
        DocumentBuilder db = dbf.newDocumentBuilder();
        Document doc = db.parse(new ByteArrayInputStream(xml.getBytes("UTF-8")));

        print(doc.getDocumentElement(), "");
    }

    private static void print(Node e, String tab) {

        if (e.getNodeType() == Node.TEXT_NODE) {
            System.out.println(tab + e.getNodeValue());
            return;
        }


        System.out.print(tab + e.getNodeName());

        NamedNodeMap as = e.getAttributes();
        if (as != null && as.getLength() > 0) {
            System.out.print(" attributes=[");
            for (int i = 0; i < as.getLength(); i++) 
                System.out.print((i == 0 ? "" : ", ") + as.item(i));
            System.out.print("]");
        }
        System.out.println();

        if (e.getNodeValue() != null)
            System.out.println(tab + " " + e.getNodeValue());

        NodeList childs = e.getChildNodes();
        for (int i = 0; i < childs.getLength(); i++)
            print(childs.item(i), tab + " ");
    }
}
Sign up to request clarification or add additional context in comments.

2 Comments

Pretty close, yes. I'll try to copy/paste output from my scratch to see in what format output should be. rn = 031001002126306
I just don't know how to roll my scratch to read whole content from line.
1

If your goal is to load/parse an XML Document from a String object, you'll simply need to use the usual XML document loading code, but to use a StringReader to provide your inputstream. (or a ByteArrayInputStream, or anything really as long as you build up a chain of transformations that lets your access your data as an InputStream).

An example follows here (untested and without exception handling. Sorry, I don't have a test environment at the moment):

  final DocumentBuilderFactory f  = DocumentBuilderFactory.newInstance();
  final DocumentBuilder        db = f.newDocumentBuilder();
  final InputSource            is = new InputSource();

  is.setCharacterStream(new StringReader(YOURSTRING));
  final Document               doc = db.parse(is);

  doc.getDocumentElement().normalize();
  /*
   * do whatever you want/need here.
   */

If that's not what you wanted, sorry I am not quite sure what you were asking here.

Comments

0

Using xerces could be more understandable:

public static void loadImetniks(String filePath) {

        File xmlFile;

        SAXBuilder builder;

        Element root, child;

        Imetnik imet;//another class that you have to create to help you for parsing

        Document doc;

        try {

            xmlFile = new File(filePath);

            builder = new SAXBuilder();  // parameters control validation, etc

            doc = builder.build(xmlFile);



            root = doc.getRootElement(); // Tr could be the root but I am not sure if you will have more Tr nodes in the same file?? 

            tr.setRn(root.getAttributeValue(Constants.RN));//define the constants string in another file
            tr.setVr(root.getAttributeValue(Constants.VR));
            tr.setSspre(root.getAttributeValue(Constants.SSPRE));
            tr.setReg(root.getAttributeValue(Constants.REG));
            tr.setIban(root.getAttributeValue(Constants.IBAN));
        .... //repeat for every attribute
        ....



            List children = root.getChildren(); // depends of how many Imetnik you will have

            for (Iterator iter = children.iterator(); iter.hasNext();) {

                child = (Element) iter.next();

                imet = new Imetnik();

                imet.loadXML(child); // you have to define the loadXML function in your object Imetnik which should extract the attributes and internal nodes

                //imets.add(contest); // just use in the case that you will have to extract more than one Imetnik node

            }



        } catch (Exception e) {

            log.error("Error al hacer el parsing del contests.xml!");

            log.error(e.getMessage());

        }

    }

For instance, your Imetnik class should contain:

   public void loadXML(Element root) {

        Element child;

    //Naslov naslov;  // for Naslov because it could be an object itself


        davcna = root.getAttributeValue(Constants.DAVCNA); //define the string constant
        matSub = root.getAttributeValue(Constants.MATSUB); //define the string constant
        drz = Integer.parseInt(root.getAttributeValue(Constants.DRZ)); //define the string constant



        List children = root.getChildren(); // your root is Imetnik now

        for (Iterator iter = children.iterator(); iter.hasNext();) {
          .....
          .......
       }
}

Comments

-1

The best solution to parse XML files in Java is to use a dedicated library such as:

  1. Xerces
  2. Sax

2 Comments

I put \" so that java doesn't count it as comment. Yes, I want to read this line as string.
Not a very helpful answer. Perhaps you provide a bit of code to get the OP going. Or point to a good tutorial.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.