我有一个包含以下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
}
}