将XML元素节点和文本节点放入字符串数组

时间:2012-08-26 18:35:52

标签: java xml

请帮我将元素和文本节点放入String s。

数组中

例如.xml文件包含:

<soap:Envelope>
  <soap:Body>
    <ser:getTitle>
      <!--Optional:-->
      <ser:title>Meeting</ser:title>
    </ser:getTitle>
    <ser:getDiscription>
      <!--Optional:-->
      <ser:discription>this is the meeting</ser:discription>
    </ser:getDiscription>
    ...
  </soap:Body>
</soap:Envelop>

现在我想将值放入String[] key, value,如下所示:

key[0] = "title";
value[0] = "meeting";
key[1] = "discription";
value[1] = "this is the meeting";

......等等。

非常感谢提前!

1 个答案:

答案 0 :(得分:1)

您可以使用DOM来解析输入XML并使用以下内容:

import javax.xml.parsers.*;
import org.w3c.dom.*;
import java.io.File;

public dumpXMLTags(...) {
  String[] keys; // you would need that with appropriate size initialized
  String[] values;  

  // Parse your XML file and construct DOM tree
  File fXmlFile = new File(PATH_TO_YOUR_XML_FILE);
  DocumentBuilder dBuilder = DocumentBuilderFactory.newInstance().newDocumentBuilder();
  Document doc = dBuilder.parse(fXmlFile);
  doc.getDocumentElement().normalize();

  // Traverse DOM tree (make sure is not empty first, etc)
  NodeIterator iterator = traversal.createNodeIterator(
      doc.getDocumentElement(), NodeFilter.SHOW_ELEMENT, null, true);

  int i = 0;  // index to you key/value Array

  for (Node n = iterator.nextNode(); n != null; n = iterator.nextNode()) {
     keys[i] = ((Element) n).getTagName();
     values[i] = ((Element)n).getNodeValue();
     i++;
  }
}

或者你可以使用XPATH和

//@* | //*[not(*)]

表达式,如下所述:Question 7199897

public static void main(String[] args) throws Exception {
    DocumentBuilder builder = DocumentBuilderFactory.newInstance().newDocumentBuilder();
    Document doc = builder.parse(new InputSource(new StringReader(xml)));

    XPathFactory xpf = XPathFactory.newInstance();
    XPath xp = xpf.newXPath();
    NodeList nodes = (NodeList)xp.evaluate("//@* | //*[not(*)]", doc, XPathConstants.NODESET);

    System.out.println(nodes.getLength());

    for (int i=0, len=nodes.getLength(); i<len; i++) {
        Node item = nodes.item(i);
        System.out.println(item.getNodeName() + " : " + item.getTextContent());
    }
}