1

クラスごとに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;andが表示されることを期待していますlf

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

1 に答える 1

0

XMLは、入力にすべての可能な種類のEOLスタイルを含めることができるが、パーサーはそれらすべてを単一の改行(\n、ASCII 10)文字に置き換える必要があることを定義しています。

文字を保護する場合は&#13;、XMLパーサーが入力を認識する前に、ASCII13を自分自身に置き換える必要があります。Javaを使用する場合は、を使用することをお勧めしますFilterInputStream

于 2010-08-10T13:10:07.363 に答える