2

私はクライアントから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 */

これらの 2 つのリンクを参照しましたが、Java XPath を使用して XML の単純な文字列を解析し、Java で XML を照会する最も簡単な方法については、あまり助けになりませんでした。

これらの個々の文字列をXMLから取得するにはどうすればよいですか...組み込みXMLまたは古いsubstring方法を使用して(非効率的)

4

2 に答える 2

2

XPath が間違っています。要素のコンテンツを XPath に要求していますが、これは実際には空です。属性を取得するには、個別に取得する必要があります。

/Esp:Interface/Esp:Transaction/@ActionCode

または、それらすべてを一度に取得できます

/Esp:Interface/Esp:Transaction/@*

ただし、これにより、ドキュメントからノードのグループが得られます。各ノードには名前と値があり、コードで引き出す必要があります。ドキュメントに表示される属性の文字列を取得する方法はありません。

于 2013-08-26T13:19:43.803 に答える