在Java中将XML读取为字符串

有人可以帮我这个吗? 我想知道如何将此示例作为字符串阅读? 我知道如何阅读第一个,但不知道如何阅读它们

UNKNOWNUNKNOWNUNKNOWNUNKNOWNUNKNOWNUNKNOWN 

也许这就是你要找的? 示例: 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 = "UNKNOWNUNKNOWNUNKNOWNUNKNOWNUNKNOWNUNKNOWN"; 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 + " "); } } 

如果您的目标是从String对象加载/解析XML文档,您只需使用通常的XML文档加载代码,但使用StringReader来提供输入流。 (或者ByteArrayInputStream,或任何真正的东西,只要你建立一个允许你作为InputStream访问你的数据的转换链)。

这里有一个例子(未经测试且无exception处理。抱歉,我目前没有测试环境):

  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. */ 

如果这不是你想要的,对不起,我不太清楚你在这里问的是什么。

使用xerces可能更容易理解:

 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()); } } 

例如,您的Imetnik类应包含:

  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();) { ..... ....... } } 

在Java中解析XML文件的最佳解决方案是使用专用库,例如​​:

  1. 的Xerces
  2. 萨克斯