解析来自数组元素的soapxml响应

ebdffaop  于 2021-07-08  发布在  Java
关注(0)|答案(1)|浏览(302)

我对soapxml的回答有疑问。
如何检索multiref的所有值。值而不是名称或其他元素。soap响应的完整列表如下所示

<?xml version="1.0" encoding="UTF-8"?>
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    <soapenv:Body>
        <queryAccountBalanceByCardResponse soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
            <ResponseInfo href="#id0"/>
            <Details href="#id1"/>
        </queryAccountBalanceByCardResponse>
        <multiRef id="id0" soapenc:root="0" soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" xsi:type="ns1:OperationResponseInfo" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" xmlns:ns1="urn:issuing_v_01_02_xsd">
            <response_code xsi:type="xsd:integer">0</response_code>
            <error_description xsi:type="xsd:string" xsi:nil="true"/>
            <error_action xsi:type="xsd:string" xsi:nil="true"/>
            <EXTERNAL_SESSION_ID xsi:type="xsd:string">****</EXTERNAL_SESSION_ID>
        </multiRef>
        <multiRef id="id1" soapenc:root="0" soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" xsi:type="ns2:ListType_Generic" xmlns:ns2="urn:issuing_v_01_02_xsd" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/">
            <row href="#id2"/>
        </multiRef>
        <multiRef id="id2" soapenc:root="0" soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" xsi:type="ns3:RowType_Generic" xmlns:ns3="urn:issuing_v_01_02_xsd" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/">
            <item href="#id3"/>
            <item href="#id4"/>
            <item href="#id5"/>
            <item href="#id6"/>
            <item href="#id7"/>
            <item href="#id8"/>
            <item href="#id9"/>
            <item href="#id10"/>
            <item href="#id11"/>
            <item href="#id12"/>
            <item href="#id13"/>
            <item href="#id14"/>
            <item href="#id15"/>
            <item href="#id16"/>
            <item href="#id17"/>
            <item href="#id18"/>
            <item href="#id19"/>
            <item href="#id20"/>
        </multiRef>
        <multiRef id="id10" soapenc:root="0" soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" xsi:type="ns4:ItemType_Generic" xmlns:ns4="urn:issuing_v_01_02_xsd" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/">
            <name xsi:type="xsd:string">END_BAL</name>
            <value xsi:type="xsd:string">***</value>
        </multiRef>
        <multiRef id="id8" soapenc:root="0" soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" xsi:type="ns5:ItemType_Generic" xmlns:ns5="urn:issuing_v_01_02_xsd" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/">
            <name xsi:type="xsd:string">ACC_STATUS</name>
            <value xsi:type="xsd:string">****</value>
        </multiRef>
        <multiRef id="id13" soapenc:root="0" soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" xsi:type="ns6:ItemType_Generic" xmlns:ns6="urn:issuing_v_01_02_xsd" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/">
            <name xsi:type="xsd:string">C_ACCNT_TYPE</name>
            <value xsi:type="xsd:string">00</value>
        </multiRef>
        <multiRef id="id5" soapenc:root="0" soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" xsi:type="ns7:ItemType_Generic" xmlns:ns7="urn:issuing_v_01_02_xsd" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/">
            <name xsi:type="xsd:string">CARD_STATUS</name>
            <value xsi:type="xsd:string">0</value>
        </multiRef>
        <multiRef id="id16" soapenc:root="0" soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" xsi:type="ns8:ItemType_Generic" xmlns:ns8="urn:issuing_v_01_02_xsd" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/">
            <name xsi:type="xsd:string">BANK_C</name>
            <value xsi:type="xsd:string">**</value>
        </multiRef>
        <multiRef id="id17" soapenc:root="0" soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" xsi:type="ns9:ItemType_Generic" xmlns:ns9="urn:issuing_v_01_02_xsd" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/">
            <name xsi:type="xsd:string">GROUPC</name>
            <value xsi:type="xsd:string">**</value>
        </multiRef>
        <multiRef id="id19" soapenc:root="0" soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" xsi:type="ns10:ItemType_Generic" xmlns:ns10="urn:issuing_v_01_02_xsd" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/">
            <name xsi:type="xsd:string">CRD</name>
            <value xsi:type="xsd:string">**</value>
        </multiRef>
        <multiRef id="id14" soapenc:root="0" soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" xsi:type="ns11:ItemType_Generic" xmlns:ns11="urn:issuing_v_01_02_xsd" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/">
            <name xsi:type="xsd:string">STOP_CAUSE</name>
            <value xsi:type="xsd:string">0</value>
        </multiRef>
        <multiRef id="id3" soapenc:root="0" soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" xsi:type="ns12:ItemType_Generic" xmlns:ns12="urn:issuing_v_01_02_xsd" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/">
            <name xsi:type="xsd:string">CARD</name>
            <value xsi:type="xsd:string">*****</value>
        </multiRef>
        <multiRef id="id9" soapenc:root="0" soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" xsi:type="ns13:ItemType_Generic" xmlns:ns13="urn:issuing_v_01_02_xsd" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/">
            <name xsi:type="xsd:string">CCY</name>
            <value xsi:type="xsd:string">***</value>
        </multiRef>
        <multiRef id="id20" soapenc:root="0" soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" xsi:type="ns14:ItemType_Generic" xmlns:ns14="urn:issuing_v_01_02_xsd" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/">
            <name xsi:type="xsd:string">CRD_EXPIRY</name>
            <value xsi:type="xsd:string"/>
        </multiRef>
        <multiRef id="id7" soapenc:root="0" soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" xsi:type="ns15:ItemType_Generic" xmlns:ns15="urn:issuing_v_01_02_xsd" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/">
            <name xsi:type="xsd:string">CARD_ACCT</name>
            <value xsi:type="xsd:string">*****</value>
        </multiRef>
        <multiRef id="id18" soapenc:root="0" soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" xsi:type="ns16:ItemType_Generic" xmlns:ns16="urn:issuing_v_01_02_xsd" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/">
            <name xsi:type="xsd:string">CCY_EXP</name>
            <value xsi:type="xsd:string">****</value>
        </multiRef>
        <multiRef id="id4" soapenc:root="0" soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" xsi:type="ns17:ItemType_Generic" xmlns:ns17="urn:issuing_v_01_02_xsd" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/">
            <name xsi:type="xsd:string">EXPIRY1</name>
            <value xsi:type="xsd:string">****</value>
        </multiRef>
        <multiRef id="id11" soapenc:root="0" soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" xsi:type="ns18:ItemType_Generic" xmlns:ns18="urn:issuing_v_01_02_xsd" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/">
            <name xsi:type="xsd:string">LOCKED_AMOUNT</name>
            <value xsi:type="xsd:string">0</value>
        </multiRef>
        <multiRef id="id12" soapenc:root="0" soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" xsi:type="ns19:ItemType_Generic" xmlns:ns19="urn:issuing_v_01_02_xsd" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/">
            <name xsi:type="xsd:string">AVAIL_AMOUNT</name>
            <value xsi:type="xsd:string">97149</value>
        </multiRef>
        <multiRef id="id15" soapenc:root="0" soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" xsi:type="ns20:ItemType_Generic" xmlns:ns20="urn:issuing_v_01_02_xsd" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/">
            <name xsi:type="xsd:string">MAIN_ROW</name>
            <value xsi:type="xsd:string">*****</value>
        </multiRef>
        <multiRef id="id6" soapenc:root="0" soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" xsi:type="ns21:ItemType_Generic" xmlns:ns21="urn:issuing_v_01_02_xsd" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/">
            <name xsi:type="xsd:string">ACCOUNT_NO</name>
            <value xsi:type="xsd:string">****</value>
        </multiRef>
    </soapenv:Body>
</soapenv:Envelope>

我很努力,但没有结果请任何人都可以给我一个线索,如何实现获得特定的价值在java中。使用jaxb或其他工具。提前谢谢。如您所见,multiref是一个数组。
我写的代码来获取所有多重引用的值。

public static void main(String[] args)
{
    List<String> output = null;
    try {
        output = getFullNameFromXml(xml, "multiRef");
    } catch (Exception e) {
        e.printStackTrace();
    }
    String[] strarray = new String[output.size()];
    output.toArray(strarray);
    System.out.print("Response Array is "+ Arrays.toString(strarray));

}

public static Document loadXMLString(String response) throws Exception
{
    DocumentBuilderFactory dbf =DocumentBuilderFactory.newInstance();
    DocumentBuilder db = dbf.newDocumentBuilder();
    InputSource is = new InputSource(new StringReader(response));

    return db.parse(is);
}

public static List<String> getFullNameFromXml(String response, String tagName) throws Exception {
    Document xmlDoc = loadXMLString(response);
    NodeList nodeList = xmlDoc.getElementsByTagName(tagName);
    List<String> ids = new ArrayList<String>(nodeList.getLength());
    for(int i=0;i<nodeList.getLength(); i++) {
        Node x = nodeList.item(i);
        ids.add(x.getFirstChild().getNodeValue());
        System.out.println(nodeList.item(i).getFirstChild().getNodeValue());
    }
    return ids;
}

但结果只有21个逗号的空数组。您能给我一个提示,让我从这个soapxml中获取multiref的所有值吗。提前谢谢

eagi6jfj

eagi6jfj1#

这是我问题的解决办法。任何能帮我的人都会很高兴的。

public static void main(String[] args)
    {

        try {
        String    output = getBalance(xml, "multiRef");
            System.out.print("Response Balance is "+ output);
        } catch (Exception e) {
            e.printStackTrace();
        }

    }

    public static Document loadXMLString(String response) throws Exception
    {
        DocumentBuilderFactory dbf =DocumentBuilderFactory.newInstance();
        DocumentBuilder db = dbf.newDocumentBuilder();
        InputSource is = new InputSource(new StringReader(response));

        return db.parse(is);
    }

    public static String getBalance(String response, String tagName) throws Exception {
        Document xmlDoc = loadXMLString(response);
        NodeList nodeList = xmlDoc.getElementsByTagName(tagName);

        String amount = "";
        List<String> ids = new ArrayList<String>(nodeList.getLength());
        for(int i=0;i<nodeList.getLength(); i++)
        {
            Node x = nodeList.item(i);
            for(int j = 0 ; j < x.getChildNodes().getLength();j ++)
            {
                // nodeList.item(18).getChildNodes().item(3).getFirstChild()
                if(x.getChildNodes().item(j).getFirstChild() != null)
                {
                    if(x.getChildNodes().item(j).getTextContent().equals("AVAIL_AMOUNT"))
                    {
                        // Todo Need to fix in the future + 2 custom
                        return x.getChildNodes().item(j + 2).getTextContent();
                    }
                }

            }
        }
        return amount;
    }

相关问题