0

私の Web サービスは、DOM を使用してこの文字列を構築している String(xml) を返します。問題は、この xml を文字列に変換する場合です。最初に追加された追加の CDATA があり、それを削除できないようです。私はこの美しい関数をstackoverflowから取得しましたが、前述の問題は、Xml文字列を返したいので必要のないCDATAを追加することです。Soap Web サービスを使用していないことを確認してください。

    public static String doctoString(Document doc) {
    try {
        StringWriter sw = new StringWriter();
        TransformerFactory tf = TransformerFactory.newInstance();
        Transformer transformer = tf.newTransformer();
        transformer.setOutputProperty(OutputKeys.OMIT_XML_DECLARATION, "yes");
        transformer.setOutputProperty(OutputKeys.METHOD, "xml");
        transformer.setOutputProperty(OutputKeys.INDENT, "yes");
        transformer.setOutputProperty(OutputKeys.ENCODING, "UTF-8");
        transformer.transform(new DOMSource(doc), new StreamResult(sw));
        return sw.toString();
    } catch (Exception ex) {
        throw new RuntimeException("Error converting to String", ex);
    }
}

完全な出力:

<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
   <soap:Body>
      <ns2:getInvoppResponse xmlns:ns2="http://services.com/">
         <return>
           <![CDATA[
              <users>
                 <user>
                    <id>1</id>
                    <name>sert</name>
                 </user>
              </users>
            ]]>
          </return>
      </ns2:getInvoppResponse>
   </soap:Body>
</soap:Envelope>

ボディ出力が必要:

           <return>           
             <users>
               <user>
                  <id>1</id>
                  <name>sert</name>
               </user>
             </users>             
           </return>
4

1 に答える 1

0

あまりエレガントではないが機能的なJavaソリューションの場合(問題の新しいXML用に更新):

p = Pattern.compile("\\A.*?(\\<users\\>.*\\<\\/users\\>).*?\\z", Pattern.DOTALL );
s = "<soap:Envelope xmlns:soap=\"http://schemas.xmlsoap.org/soap/envelope/\">\n" +
"   <soap:Body>\n" +
"     <ns2:getInvoppResponse xmlns:ns2=\"http://services.com/\">\n" +
"      <return>\n" +
"        <![CDATA[\n" +
"           <users>\n" +
"              <user>\n" +
"                 <id>1</id>\n" +
"                 <name>sert</name>\n" +
"              </user>\n" +
"           </users>\n" +
"         ]]>\n" +
"       </return>\n" +
"    </ns2:getInvoppResponse>\n" +
"    </soap:Body>\n" +
"</soap:Envelope>\n";

Matcher m = p.matcher(s);
if (m.matches())
{
    s =m.group(1);
}
于 2013-02-26T13:41:59.333 に答える