4

请帮助我将元素和文本节点放入 s 数组中String

例如,一个 .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";

... 等等。

提前谢谢了!

4

1 回答 1

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(*)]

表达式,如此处所述:问题 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());
    }
}
于 2012-08-26T18:46:46.287 回答