[英]extract string from xml java
我从客户端收到XML字符串
<?xml version="1.0" encoding="UTF-8"?>
<Esp:Interface Version="1.0" xmlns:Esp="http://***Confidential****/">
<Esp:Transaction ActionCode="APPROVE" CardNumber="474849********28" ExpiryDate="0824"
ResponseCode="00" TerminalId="03563001" Track2="474849********28=08241261234"
TransactionAmount="300" TransactionId="00051" Type="PURCHASE" LocalDate="0823"
LocalTime="152006" PosOperatorId="1234" AuthorizationNumber="123456" MessageType="REFERAL">
</Esp:Transaction>
</Esp:Interface>
我想提取每个字符串像
ActionCode="APPROVE"
CardNumber="474849********28"
ExpiryDate="0824"
ResponseCode="00"
TerminalId="03563001"
Track2="474849********28=08241261234"
TransactionAmount="300"
TransactionId="00051"
Type="PURCHASE"
LocalDate="0823"
LocalTime="152006"
PosOperatorId="1234"
AuthorizationNumber="123456"
MessageType="REFERAL"
我使用XPath
读取XML字符串,但它给了我错误
InputSource source = new InputSource(new StringReader(sXMLData));//sXMLData Contains XML String
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
DocumentBuilder db = dbf.newDocumentBuilder();
Document document = db.parse(source);
XPathFactory xpathFactory = XPathFactory.newInstance();
XPath xpath = xpathFactory.newXPath();
String msg = xpath.evaluate("/Esp:Interface/Esp:Transaction", document);
System.out.println("msg= " + msg);
错误:
msg : /* Coming Blank */
我引用了这两个链接,但并没有得到太多帮助, 使用Java XPath解析XML简单字符串,并且是用Java 查询XML的最简单方法
我如何通过使用XML
内置或旧的substring
方法(效率低下)从XML中获取这些单独的字符串
您的XPath错误。 您正在向XPath询问元素的内容,该内容的确为空。 为了获取属性,您需要分别获取它们:
/Esp:Interface/Esp:Transaction/@ActionCode
或者您可以一次全部获得它们
/Esp:Interface/Esp:Transaction/@*
但这将为您提供文档中的一组节点,每个节点都有一个名称和一个值,您必须在代码中提取它们。 据我所知,仅凭属性字符串就不会出现在文档中。
听起来您在<?xml ...?>
之前有一些禁止的字符。 确保文件已正确保存为UTF-8,并且声明前没有空格。
为了解析属性,在这种简单情况下,我建议使用SAX解析器:
public class MySaxHandler extends DefaultHandler {
public static void main(String[] args) throws Throwable {
String sXMLData = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\r\n"
+ "<Esp:Interface Version=\"1.0\" xmlns:Esp=\"http://***Confidential****/\">\r\n"
+ "<Esp:Transaction ActionCode=\"APPROVE\" CardNumber=\"474849********28\" ExpiryDate=\"0824\" \r\n"
+ " ResponseCode=\"00\" TerminalId=\"03563001\" Track2=\"474849********28=08241261234\" \r\n"
+ " TransactionAmount=\"300\" TransactionId=\"00051\" Type=\"PURCHASE\" LocalDate=\"0823\" \r\n"
+ " LocalTime=\"152006\" PosOperatorId=\"1234\" AuthorizationNumber=\"123456\" MessageType=\"REFERAL\">\r\n"
+ "</Esp:Transaction>\r\n" + "</Esp:Interface>";
InputSource source = new InputSource(new StringReader(sXMLData));
XMLReader reader = XMLReaderFactory.createXMLReader();
reader.setContentHandler(new MySaxHandler());
reader.parse(source);
}
@Override
public void startElement(String uri, String localName, String qName,
Attributes atts) throws SAXException {
if (qName.equals("Esp:Transaction")) {
for (int i = 0; i < atts.getLength(); i++) {
System.out.println(atts.getQName(i) + "=\"" + atts.getValue(i) + "\"");
}
}
}
}
给出以下输出:
ActionCode="APPROVE"
CardNumber="474849********28"
ExpiryDate="0824"
ResponseCode="00"
TerminalId="03563001"
Track2="474849********28=08241261234"
TransactionAmount="300"
TransactionId="00051"
Type="PURCHASE"
LocalDate="0823"
LocalTime="152006"
PosOperatorId="1234"
AuthorizationNumber="123456"
MessageType="REFERAL"
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.