1

UTF-8 の XML があり、中国語の特殊文字がいくつかあります。この XML を解析する必要があります。

DocumentBuilderFactory factory = DocumentBuilderFactory
                    .newInstance();
factory.setIgnoringElementContentWhitespace(true);
factory.setNamespaceAware(true);
factory.setValidating(true);

//byte[] buffer = xmlMsg.getBytes("UTF-16");

logger.info("transformToUTP " + xmlMsg);


//byte[] buffer = soapMessage.getBytes();
//ByteArrayInputStream stream = new ByteArrayInputStream(buffer);               


InputSource is = new InputSource(new ByteArrayInputStream(
                   xmlMsg.getBytes("UTF-16")));

Document doc = factory.newDocumentBuilder().parse(is);
//Document doc = factory.newDocumentBuilder().parse(
                   new InputSource(new StringReader(xmlMsg)));                              

XPath xpath = XPathFactory.newInstance().newXPath();
xpath.setNamespaceContext(getNameSpace());

XPathExpression soapBodyExpr = xpath.compile(BODY_XPATH_EXP);
Node soapBody = (Node) soapBodyExpr.evaluate(doc,
            XPathConstants.NODE);

Node reqMsgNode = soapBody.getFirstChild();

reqMsgNode でヌル ポインター例外が発生しています。

4

1 に答える 1

1

xml を文字列に変換せず、そのまま解析し、

DocummentBuilder.parse(File)またDocumentBuilder.parse(InputStream)

パーサーは、たとえば xml 宣言からエンコーディングを取得します。エンコーディング<?xml version="1.0" encoding="UTF-8"?>がない場合は、デフォルトで UTF-8 を使用します。

于 2013-02-15T05:20:12.750 に答える