java - java从xml中提取字符串

标签 java xml xml-parsing

我从客户端收到的 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 */

我引用了这两个链接,但没有得到像 Parse XML Simple String using Java XPathSimplest way to query XML in Java 那样多的帮助

我如何从 XML 中获取这些单独的字符串...通过使用 XML 中的构建或旧的 substring 方法(效率低下)

最佳答案

您的 XPath 错误。您向 XPath 询问该元素的内容,该元素确实是空的。为了获取属性,您需要单独获取它们:

/Esp:Interface/Esp:Transaction/@ActionCode

或者您可以一次性获取所有内容

/Esp:Interface/Esp:Transaction/@*

但这将为您提供文档中的一组节点,每个节点都有一个名称和一个值,您必须在代码中提取它们。据我所知,无法仅获取文档中出现的属性字符串。

关于java - java从xml中提取字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18444485/

相关文章:

sql-server - 使用键/对表与 XML 字段和 XPath 的 SQL Server 性能

swift - 使用 XMLParsing swift 库发布请求时出现错误 401

java - 如何在 Java 中创建一个简单的 4x3 二维数组?

java - 如何过滤 c :forEach using the value selected in a drop down? 给出的结果

用于谷歌身份 validator 的 Java API

java - 当一个或多个元素是列表时(maxOccurs=unbounded),是否可以让 JAXB 忽略 <sequence> 中元素的顺序?

xml-parsing - 如何解析 ansible 中的 XML 响应?

Java Servlet 检查文件是否存在或创建它

java - 评估不包括 xml 标记的 XPath 查询

java - 如何从字符串创建元素