Java Web服务从dom中删除cdata
我的web服务返回一个字符串(xml)我正在使用DOM构建这个字符串,现在的问题是当我想将这个xml转换成字符串时。最初添加了一个额外的CDATA,我似乎无法删除它。 我从stackoverflow中得到了这个漂亮的函数,但前面提到的问题是它添加了CDATA,我不需要它,因为我想返回Xml字符串。 请不要以为我在使用SOAPWeb服务Java Web服务从dom中删除cdata,java,xml,dom,Java,Xml,Dom,我的web服务返回一个字符串(xml)我正在使用DOM构建这个字符串,现在的问题是当我想将这个xml转换成字符串时。最初添加了一个额外的CDATA,我似乎无法删除它。 我从stackoverflow中得到了这个漂亮的函数,但前面提到的问题是它添加了CDATA,我不需要它,因为我想返回Xml字符串。 请不要以为我在使用SOAPWeb服务 public static String doctoString(Document doc) { try { StringWrit
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>
1.
sert
]]>
所需的车身输出:
<return>
<users>
<user>
<id>1</id>
<name>sert</name>
</user>
</users>
</return>
1.
sert
针对一个不那么优雅但功能强大的Java解决方案(针对有问题的新XML进行了更新):
p=Pattern.compile(“\\A.*?(\\.\\).\\z”,Pattern.DOTALL);
s=“\n”+
“\n”+
“\n”+
“\n”+
“\n”+
“\n”+
“1\n”+
“sert\n”+
“\n”+
“\n”+
“]]>\n”+
“\n”+
“\n”+
“\n”+
“\n”;
匹配器m=匹配器p;
如果(m.matches())
{
s=m组(1);
}
您是否尝试检查文档以查看传入的内容。您提供的代码可能运行良好。我怀疑您的文档恰好包含CDATA。顺便说一下,对于web服务来说,缩进是不必要的。为什么您认为您不需要CDATA部分?您的文档中的顶级元素是什么?是return还是users?@user156873,当我想从php读取它时,Cdata破坏了xml…@Henry users是最重要的元素,看起来java会自动添加return。。。我认为问题不是来自上面,而是来自web服务本身,它似乎在输出xml上强制执行cdata。。。你知道如何禁用这个破坏我代码的功能吗?@rtp你能编辑你的问题并添加一个完整的SOAP信封吗?顺便问一下,在php中使用什么库来处理SOAP?
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);
}