我有一个包含以下XML代码的Java字符串:

<?xml version="1.0" encoding="utf-8"?>
    <Chart>
        <request>
            <zip>12345</zip>
            <city>Miami</city>
        </request>
    </Chart>


解析此字符串以提取值的最简单方法是什么

<zip> (in this case 12345)

最佳答案

您拥有XML,最好将其解析为XML,并直接使用XPATH

import javax.xml.namespace.NamespaceContext;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.transform.OutputKeys;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;

import javax.xml.xpath.XPathConstants;
import javax.xml.xpath.XPathExpression;

import javax.xml.xpath.XPath;
import javax.xml.xpath.XPathFactory;


String xml="<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n" +
        "    <Chart>\r\n" +
        "        <request>\r\n" +
        "            <zip>12345</zip>\r\n" +
        "            <city>Miami</city>\r\n" +
        "        </request>\r\n" +
        "    </Chart>";

DocumentBuilderFactory builderFactory =DocumentBuilderFactory.newInstance();
builderFactory.setNamespaceAware(true);
DocumentBuilder builder = builderFactory.newDocumentBuilder();

// PARSE XML
Document document = builder.parse(new InputSource(new  StringReader(xml)));

// XPATH
XPath xPath = XPathFactory.newInstance().newXPath();
// your path
String expression = "//Chart/request/zip";

NodeList nodes  = (NodeList)  xPath.compile(expression).evaluate(document, XPathConstants.NODESET);

for(int i=0; i<nodes.getLength(); i++)
     {
      Node the_node = nodes.item(i);

     if(the_node instanceof Element)
          {
          Element the_element=(Element) the_node;
          System.out.println("element="+the_element.getTextContent());
          break; // STOP at the first
          }
      }

10-07 19:58
查看更多