обработка возврата каретки в канонизации с Java - PullRequest
1 голос
/ 10 августа 2010

Я пытаюсь канонизировать текстовый узел html классом com/sun/org/apache/xml/internal/security/c14n/Canonicalizer.java. Мой входной файл имеет возврат каретки и перевод строки в конце. После канонизации я ожидаю увидеть преобразование каретки в 
. Однако вывод, который я получаю, не содержит возврата каретки. Он содержит только перевод строки. Как мне изменить мой код, чтобы включить возврат каретки?

пример: мой ввод с cr и lf в конце

<MyNode xmlns="http://www.artsince.com/test#">Lqc3EeJlyY45bBm1lha869dkHWw1w+U8A6aKM2Xuwk3yWTjt0A2Wq/25rAncSBQlBGOCyTmhfic9(crlf)
9mWf4mC2Ui6ccLqCMjFR4mDQApkfoTy+Cu2eHul9CRjKa0TqckFv7ryda9V5MHruueXII/V+gPLT(crlf)
c76LsetK8C1434K66+Q=</MyNode>

это пример кода, который я использую

DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
dbf.setNamespaceAware(true);
DocumentBuilder db = dbf.newDocumentBuilder();
Document doc = db.parse(new FileInputStream(new File("C:\\text.xml")));

if(!Init.isInitialized())
{
   Init.init();
}

Path xPath = XPathFactory.newInstance().newXPath();
String expression = "child::*/child::text()"; 
NodeList textNodeList = (NodeList) xPath.evaluate(expression, doc, XPathConstants.NODESET);
Canonicalizer cn = Canonicalizer.getInstance(Canonicalizer.ALGO_ID_C14N_OMIT_COMMENTS);
byte[] canonn = cn.canonicalizeXPathNodeSet(textNodeList);
System.out.println(new String(canonn).toCharArray());

и вывод, который я получаю, имеет lf в конце

Lqc3EeJlyY45bBm1lha869dkHWw1w+U8A6aKM2Xuwk3yWTjt0A2Wq/25rAncSBQlBGOCyTmhfic9(lf)
9mWf4mC2Ui6ccLqCMjFR4mDQApkfoTy+Cu2eHul9CRjKa0TqckFv7ryda9V5MHruueXII/V+gPLT(lf)
c76LsetK8C1434K66+Q=

однако я ожидаю увидеть &#xD; и lf в конце строк

Lqc3EeJlyY45bBm1lha869dkHWw1w+U8A6aKM2Xuwk3yWTjt0A2Wq/25rAncSBQlBGOCyTmhfic9&#xD;(lf)
9mWf4mC2Ui6ccLqCMjFR4mDQApkfoTy+Cu2eHul9CRjKa0TqckFv7ryda9V5MHruueXII/V+gPLT&#xD;(lf)
c76LsetK8C1434K66+Q=

1 Ответ

0 голосов
/ 10 августа 2010

XML определяет, что входные данные могут содержать все возможные виды стилей EOL, но синтаксический анализатор должен заменить их все одним символом перевода строки (\n, ASCII 10).

Если вы хотите защитить символ, вы должны заменить ASCII 13 на &#13;, прежде чем анализатор XML увидит ввод. Если вы используете Java, я предлагаю использовать FilterInputStream.

...