使用java处理规范化中的回车

时间:2010-08-10 13:05:51

标签: java xml canonicalization

我试图通过com/sun/org/apache/xml/internal/security/c14n/Canonicalizer.java类规范化html文本节点。我的输入文件有回车符和最后一行换行符。在规范化时,我希望看到回车转变为
。但是,我得到的输出不包含回车符。它只包含换行符。我该如何修改我的代码以包含回车?

示例:我在最后输入crlf

<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 :(得分:0)

XML定义输入可以包含所有可能类型的EOL样式,但解析器必须用单个换行符(\n,ASCII 10)字符替换所有这些样式。

如果要保护字符,必须在XML解析器看到输入之前自己用&#13;替换ASCII 13。如果您使用Java,我建议使用FilterInputStream