Unescape _xHHHH_ JAVA中的XML转义序列(SOAPMessage)

时间:2012-04-11 22:14:47

标签: java xml escaping

我从Web服务收到以下SOAP响应。

<?xml version="1.0" encoding="ISO-8859-1"?>
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" >
<SOAP-ENV:Header>
</SOAP-ENV:Header>
<SOAP-ENV:Body>
<cxmla:ExecuteResponse xmlns:cxmla="urn:schemas-microsoft-com:xml-analysis">
  <cxmla:return>
    <root xmlns="urn:schemas-microsoft-com:xml-analysis:rowset" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:EX="urn:schemas-microsoft-com:xml-analysis:exception">
      <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" targetNamespace="urn:schemas-microsoft-com:xml-analysis:rowset" xmlns="urn:schemas-microsoft-com:xml-analysis:rowset" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:sql="urn:schemas-microsoft-com:xml-sql" elementFormDefault="qualified">
        <xsd:element name="root">
          <xsd:complexType>
            <xsd:sequence>
              <xsd:element maxOccurs="unbounded" minOccurs="0" name="row" type="row"/>
            </xsd:sequence>
          </xsd:complexType>
        </xsd:element>
        <xsd:simpleType name="uuid">
          <xsd:restriction base="xsd:string">
            <xsd:pattern value="[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}"/>
          </xsd:restriction>
        </xsd:simpleType>
        <xsd:complexType name="row">
          <xsd:sequence>
            <xsd:element minOccurs="0" name="_x005b_TRD.New_x0020_Hierarchy_x0020_0_x005d_._x005b_Funding_x0020_Entity_x005d_._x005b_MEMBER_CAPTION_x005d_" sql:field="[TRD.New Hierarchy 0].[Funding Entity].[MEMBER_CAPTION]" type="xsd:string"/>
            <xsd:element minOccurs="0" name="_x005b_TRD.New_x0020_Hierarchy_x0020_0_x005d_._x005b_Program_x005d_._x005b_MEMBER_CAPTION_x005d_" sql:field="[TRD.New Hierarchy 0].[Program].[MEMBER_CAPTION]" type="xsd:string"/>
            <xsd:element minOccurs="0" name="_x005b_TRD.New_x0020_Hierarchy_x0020_0_x005d_._x005b_Currency_x005d_._x005b_MEMBER_CAPTION_x005d_" sql:field="[TRD.New Hierarchy 0].[Currency].[MEMBER_CAPTION]" type="xsd:string"/>
            <xsd:element minOccurs="0" name="_x005b_TRD.New_x0020_Hierarchy_x0020_0_x005d_._x005b_Term_x005d_._x005b_MEMBER_CAPTION_x005d_" sql:field="[TRD.New Hierarchy 0].[Term].[MEMBER_CAPTION]" type="xsd:string"/>
            <xsd:element minOccurs="0" name="_x005b_TRD.New_x0020_Hierarchy_x0020_0_x005d_._x005b_Sequence_x0020_Number_x005d_._x005b_MEMBER_CAPTION_x005d_" sql:field="[TRD.New Hierarchy 0].[Sequence Number].[MEMBER_CAPTION]" type="xsd:string"/>
            <xsd:element minOccurs="0" name="_x005b_TRD.New_x0020_Hierarchy_x0020_0_x005d_._x005b_Rate_x005d_._x005b_MEMBER_CAPTION_x005d_" sql:field="[TRD.New Hierarchy 0].[Rate].[MEMBER_CAPTION]" type="xsd:string"/>
            <xsd:element minOccurs="0" name="_x005b_TRD.New_x0020_Hierarchy_x0020_0_x005d_._x005b_Outstanding_x0020_Total_x005d_._x005b_MEMBER_CAPTION_x005d_" sql:field="[TRD.New Hierarchy 0].[Outstanding Total].[MEMBER_CAPTION]" type="xsd:string"/>
            <xsd:element minOccurs="0" name="_x005b_TRD.New_x0020_Hierarchy_x0020_0_x005d_._x005b_Sales_x0020_Total_amt_x005d_._x005b_MEMBER_CAPTION_x005d_" sql:field="[TRD.New Hierarchy 0].[Sales Total_amt].[MEMBER_CAPTION]" type="xsd:string"/>
            <xsd:element minOccurs="0" name="_x005b_TRD.New_x0020_Hierarchy_x0020_0_x005d_._x005b_Yield_x0020_Pct_rate_x005d_._x005b_MEMBER_CAPTION_x005d_" sql:field="[TRD.New Hierarchy 0].[Yield Pct_rate].[MEMBER_CAPTION]" type="xsd:string"/>
            <xsd:element minOccurs="0" name="_x005b_TRD.New_x0020_Hierarchy_x0020_0_x005d_._x005b_Counterparty_x005d_._x005b_MEMBER_CAPTION_x005d_" sql:field="[TRD.New Hierarchy 0].[Counterparty].[MEMBER_CAPTION]" type="xsd:string"/>
            <xsd:element minOccurs="0" name="_x005b_TRD.New_x0020_Hierarchy_x0020_0_x005d_._x005b_Account_x005d_._x005b_MEMBER_CAPTION_x005d_" sql:field="[TRD.New Hierarchy 0].[Account].[MEMBER_CAPTION]" type="xsd:string"/>
            <xsd:element minOccurs="0" name="_x005b_TRD.New_x0020_Hierarchy_x0020_0_x005d_._x005b_Contact_x005d_._x005b_MEMBER_CAPTION_x005d_" sql:field="[TRD.New Hierarchy 0].[Contact].[MEMBER_CAPTION]" type="xsd:string"/>
            <xsd:element minOccurs="0" name="_x005b_TRD.New_x0020_Hierarchy_x0020_0_x005d_._x005b_Cusip_x0020_Num_x005d_._x005b_MEMBER_CAPTION_x005d_" sql:field="[TRD.New Hierarchy 0].[Cusip Num].[MEMBER_CAPTION]" type="xsd:string"/>
            <xsd:element minOccurs="0" name="_x005b_TRD.New_x0020_Hierarchy_x0020_0_x005d_._x005b_Price_x0020_Amt_x005d_._x005b_MEMBER_CAPTION_x005d_" sql:field="[TRD.New Hierarchy 0].[Price Amt].[MEMBER_CAPTION]" type="xsd:string"/>
            <xsd:element minOccurs="0" name="_x005b_TRD.New_x0020_Hierarchy_x0020_0_x005d_._x005b_Payoff_x0020_Amt_x005d_._x005b_MEMBER_CAPTION_x005d_" sql:field="[TRD.New Hierarchy 0].[Payoff Amt].[MEMBER_CAPTION]" type="xsd:string"/>
            <xsd:element minOccurs="0" name="_x005b_TRD.New_x0020_Hierarchy_x0020_0_x005d_._x005b_maturitydt_x005d_._x005b_MEMBER_CAPTION_x005d_" sql:field="[TRD.New Hierarchy 0].[maturitydt].[MEMBER_CAPTION]" type="xsd:string"/>
            <xsd:element minOccurs="0" name="_x005b_TRD.New_x0020_Hierarchy_x0020_0_x005d_._x005b_Key_x0020_Date_x005d_._x005b_MEMBER_CAPTION_x005d_" sql:field="[TRD.New Hierarchy 0].[Key Date].[MEMBER_CAPTION]" type="xsd:string"/>
            <xsd:element minOccurs="0" name="_x005b_TRD.New_x0020_Hierarchy_x0020_0_x005d_._x005b_Custodian_x005d_._x005b_MEMBER_CAPTION_x005d_" sql:field="[TRD.New Hierarchy 0].[Custodian].[MEMBER_CAPTION]" type="xsd:string"/>
            <xsd:element minOccurs="0" name="_x005b_TRD.New_x0020_Hierarchy_x0020_0_x005d_._x005b_Int_x0020_Disc_x0020_Amt_x005d_._x005b_MEMBER_CAPTION_x005d_" sql:field="[TRD.New Hierarchy 0].[Int Disc Amt].[MEMBER_CAPTION]" type="xsd:string"/>
            <xsd:element minOccurs="0" name="_x005b_TRD.New_x0020_Hierarchy_x0020_0_x005d_._x005b_IPA_x0020_code_x005d_._x005b_MEMBER_CAPTION_x005d_" sql:field="[TRD.New Hierarchy 0].[IPA code].[MEMBER_CAPTION]" type="xsd:string"/>
            <xsd:element minOccurs="0" name="_x005b_TRD.New_x0020_Hierarchy_x0020_0_x005d_._x005b_Settlement_x0020_Status_x005d_._x005b_MEMBER_CAPTION_x005d_" sql:field="[TRD.New Hierarchy 0].[Settlement Status].[MEMBER_CAPTION]" type="xsd:string"/>
            <xsd:element minOccurs="0" name="_x005b_TRD.New_x0020_Hierarchy_x0020_0_x005d_._x005b_Source_x0020_Code_x005d_._x005b_MEMBER_CAPTION_x005d_" sql:field="[TRD.New Hierarchy 0].[Source Code].[MEMBER_CAPTION]" type="xsd:string"/>
            <xsd:element minOccurs="0" name="_x005b_TRD.New_x0020_Hierarchy_x0020_0_x005d_._x005b_Trade_x0020_ID_x005d_._x005b_MEMBER_CAPTION_x005d_" sql:field="[TRD.New Hierarchy 0].[Trade ID].[MEMBER_CAPTION]" type="xsd:string"/>
            <xsd:element minOccurs="0" name="_x005b_TRD.New_x0020_Hierarchy_x0020_0_x005d_._x005b_Trade_x0020_Type_x005d_._x005b_MEMBER_CAPTION_x005d_" sql:field="[TRD.New Hierarchy 0].[Trade Type].[MEMBER_CAPTION]" type="xsd:string"/>
            <xsd:element minOccurs="0" name="_x005b_TRD.New_x0020_Hierarchy_x0020_0_x005d_._x005b_Branch_x005d_._x005b_MEMBER_CAPTION_x005d_" sql:field="[TRD.New Hierarchy 0].[Branch].[MEMBER_CAPTION]" type="xsd:string"/>
            <xsd:element minOccurs="0" name="_x005b_Measures_x005d_._x005b_RATE_x005d_" sql:field="[Measures].[RATE]"/>
          </xsd:sequence>
        </xsd:complexType>
      </xsd:schema>
          <row>
        <_x005b_TRD.New_x0020_Hierarchy_x0020_0_x005d_._x005b_Funding_x0020_Entity_x005d_._x005b_MEMBER_CAPTION_x005d_>FSC</_x005b_TRD.New_x0020_Hierarchy_x0020_0_x005d_._x005b_Funding_x0020_Entity_x005d_._x005b_MEMBER_CAPTION_x005d_>
        <_x005b_TRD.New_x0020_Hierarchy_x0020_0_x005d_._x005b_Program_x005d_._x005b_MEMBER_CAPTION_x005d_>FSCUS3A3</_x005b_TRD.New_x0020_Hierarchy_x0020_0_x005d_._x005b_Program_x005d_._x005b_MEMBER_CAPTION_x005d_>
        <_x005b_TRD.New_x0020_Hierarchy_x0020_0_x005d_._x005b_Currency_x005d_._x005b_MEMBER_CAPTION_x005d_>USD</_x005b_TRD.New_x0020_Hierarchy_x0020_0_x005d_._x005b_Currency_x005d_._x005b_MEMBER_CAPTION_x005d_>
        <_x005b_TRD.New_x0020_Hierarchy_x0020_0_x005d_._x005b_Term_x005d_._x005b_MEMBER_CAPTION_x005d_>2</_x005b_TRD.New_x0020_Hierarchy_x0020_0_x005d_._x005b_Term_x005d_._x005b_MEMBER_CAPTION_x005d_>
        <_x005b_TRD.New_x0020_Hierarchy_x0020_0_x005d_._x005b_Sequence_x0020_Number_x005d_._x005b_MEMBER_CAPTION_x005d_>70</_x005b_TRD.New_x0020_Hierarchy_x0020_0_x005d_._x005b_Sequence_x0020_Number_x005d_._x005b_MEMBER_CAPTION_x005d_>
        <_x005b_TRD.New_x0020_Hierarchy_x0020_0_x005d_._x005b_Rate_x005d_._x005b_MEMBER_CAPTION_x005d_>0.140000000000000000</_x005b_TRD.New_x0020_Hierarchy_x0020_0_x005d_._x005b_Rate_x005d_._x005b_MEMBER_CAPTION_x005d_>
        <_x005b_TRD.New_x0020_Hierarchy_x0020_0_x005d_._x005b_Outstanding_x0020_Total_x005d_._x005b_MEMBER_CAPTION_x005d_>34000000.0000</_x005b_TRD.New_x0020_Hierarchy_x0020_0_x005d_._x005b_Outstanding_x0020_Total_x005d_._x005b_MEMBER_CAPTION_x005d_>
        <_x005b_TRD.New_x0020_Hierarchy_x0020_0_x005d_._x005b_Sales_x0020_Total_amt_x005d_._x005b_MEMBER_CAPTION_x005d_>33998942.2200</_x005b_TRD.New_x0020_Hierarchy_x0020_0_x005d_._x005b_Sales_x0020_Total_amt_x005d_._x005b_MEMBER_CAPTION_x005d_>
        <_x005b_TRD.New_x0020_Hierarchy_x0020_0_x005d_._x005b_Yield_x0020_Pct_rate_x005d_._x005b_MEMBER_CAPTION_x005d_>0.140004000000000000</_x005b_TRD.New_x0020_Hierarchy_x0020_0_x005d_._x005b_Yield_x0020_Pct_rate_x005d_._x005b_MEMBER_CAPTION_x005d_>
        <_x005b_TRD.New_x0020_Hierarchy_x0020_0_x005d_._x005b_Counterparty_x005d_._x005b_MEMBER_CAPTION_x005d_>MLAM</_x005b_TRD.New_x0020_Hierarchy_x0020_0_x005d_._x005b_Counterparty_x005d_._x005b_MEMBER_CAPTION_x005d_>
        <_x005b_TRD.New_x0020_Hierarchy_x0020_0_x005d_._x005b_Account_x005d_._x005b_MEMBER_CAPTION_x005d_>RAT         </_x005b_TRD.New_x0020_Hierarchy_x0020_0_x005d_._x005b_Account_x005d_._x005b_MEMBER_CAPTION_x005d_>
        <_x005b_TRD.New_x0020_Hierarchy_x0020_0_x005d_._x005b_Contact_x005d_._x005b_MEMBER_CAPTION_x005d_>Jones, Richard</_x005b_TRD.New_x0020_Hierarchy_x0020_0_x005d_._x005b_Contact_x005d_._x005b_MEMBER_CAPTION_x005d_>
        <_x005b_TRD.New_x0020_Hierarchy_x0020_0_x005d_._x005b_Cusip_x0020_Num_x005d_._x005b_MEMBER_CAPTION_x005d_>74432KT32   </_x005b_TRD.New_x0020_Hierarchy_x0020_0_x005d_._x005b_Cusip_x0020_Num_x005d_._x005b_MEMBER_CAPTION_x005d_>
        <_x005b_TRD.New_x0020_Hierarchy_x0020_0_x005d_._x005b_Price_x0020_Amt_x005d_._x005b_MEMBER_CAPTION_x005d_>99.996888882353000000</_x005b_TRD.New_x0020_Hierarchy_x0020_0_x005d_._x005b_Price_x0020_Amt_x005d_._x005b_MEMBER_CAPTION_x005d_>
        <_x005b_TRD.New_x0020_Hierarchy_x0020_0_x005d_._x005b_Payoff_x0020_Amt_x005d_._x005b_MEMBER_CAPTION_x005d_>34000000.0000</_x005b_TRD.New_x0020_Hierarchy_x0020_0_x005d_._x005b_Payoff_x0020_Amt_x005d_._x005b_MEMBER_CAPTION_x005d_>
        <_x005b_TRD.New_x0020_Hierarchy_x0020_0_x005d_._x005b_maturitydt_x005d_._x005b_MEMBER_CAPTION_x005d_>06-03-2011</_x005b_TRD.New_x0020_Hierarchy_x0020_0_x005d_._x005b_maturitydt_x005d_._x005b_MEMBER_CAPTION_x005d_>
        <_x005b_TRD.New_x0020_Hierarchy_x0020_0_x005d_._x005b_Key_x0020_Date_x005d_._x005b_MEMBER_CAPTION_x005d_>Jun  1 2011 12:00AM</_x005b_TRD.New_x0020_Hierarchy_x0020_0_x005d_._x005b_Key_x0020_Date_x005d_._x005b_MEMBER_CAPTION_x005d_>
        <_x005b_TRD.New_x0020_Hierarchy_x0020_0_x005d_._x005b_Custodian_x005d_._x005b_MEMBER_CAPTION_x005d_>00005170    </_x005b_TRD.New_x0020_Hierarchy_x0020_0_x005d_._x005b_Custodian_x005d_._x005b_MEMBER_CAPTION_x005d_>
        <_x005b_TRD.New_x0020_Hierarchy_x0020_0_x005d_._x005b_Int_x0020_Disc_x0020_Amt_x005d_._x005b_MEMBER_CAPTION_x005d_>1057.7800</_x005b_TRD.New_x0020_Hierarchy_x0020_0_x005d_._x005b_Int_x0020_Disc_x0020_Amt_x005d_._x005b_MEMBER_CAPTION_x005d_>
        <_x005b_TRD.New_x0020_Hierarchy_x0020_0_x005d_._x005b_IPA_x0020_code_x005d_._x005b_MEMBER_CAPTION_x005d_>CITI        </_x005b_TRD.New_x0020_Hierarchy_x0020_0_x005d_._x005b_IPA_x0020_code_x005d_._x005b_MEMBER_CAPTION_x005d_>
        <_x005b_TRD.New_x0020_Hierarchy_x0020_0_x005d_._x005b_Settlement_x0020_Status_x005d_._x005b_MEMBER_CAPTION_x005d_>N </_x005b_TRD.New_x0020_Hierarchy_x0020_0_x005d_._x005b_Settlement_x0020_Status_x005d_._x005b_MEMBER_CAPTION_x005d_>
        <_x005b_TRD.New_x0020_Hierarchy_x0020_0_x005d_._x005b_Source_x0020_Code_x005d_._x005b_MEMBER_CAPTION_x005d_>MN          </_x005b_TRD.New_x0020_Hierarchy_x0020_0_x005d_._x005b_Source_x0020_Code_x005d_._x005b_MEMBER_CAPTION_x005d_>
        <_x005b_TRD.New_x0020_Hierarchy_x0020_0_x005d_._x005b_Trade_x0020_ID_x005d_._x005b_MEMBER_CAPTION_x005d_>20111520000070</_x005b_TRD.New_x0020_Hierarchy_x0020_0_x005d_._x005b_Trade_x0020_ID_x005d_._x005b_MEMBER_CAPTION_x005d_>
        <_x005b_TRD.New_x0020_Hierarchy_x0020_0_x005d_._x005b_Trade_x0020_Type_x005d_._x005b_MEMBER_CAPTION_x005d_>US3A3CP     </_x005b_TRD.New_x0020_Hierarchy_x0020_0_x005d_._x005b_Trade_x0020_Type_x005d_._x005b_MEMBER_CAPTION_x005d_>
        <_x005b_TRD.New_x0020_Hierarchy_x0020_0_x005d_._x005b_Branch_x005d_._x005b_MEMBER_CAPTION_x005d_>US          </_x005b_TRD.New_x0020_Hierarchy_x0020_0_x005d_._x005b_Branch_x005d_._x005b_MEMBER_CAPTION_x005d_>
        <_x005b_Measures_x005d_._x005b_RATE_x005d_ xsi:type="xsd:double">0.14</_x005b_Measures_x005d_._x005b_RATE_x005d_>
      </row>
    </root>
  </cxmla:return>
</cxmla:ExecuteResponse>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>

我正试图取消标记中使用的 xHHHH 以获取值。我正在使用SAAJ库进行SOAP处理。除了编写反向转义代码外,我还有哪些选择。

最佳, 罗汉

1 个答案:

答案 0 :(得分:0)

好吧,我实现了一个方法来做到这一点。但是我仍然想知道在任何库中是否有标准的东西来执行此操作。

 private Pattern s_hexPattern = Pattern.compile("_x([A-Fa-f0-9]{4})_"); 
  public String convertHexToString ( String str ) {

    Matcher m = s_hexPattern.matcher(str);
    while ( m.find() ){
        int decimal = Integer.parseInt(m.group(1), 16);
        str = str.replace(m.group() , (char)decimal + "" ) ;
    }

    return str;
    }

最佳, 罗汉