0

以下のリンクに記載されているトランスフォーマーコードを使用して、xml要素とその子をxml文字列に変換しました

Javaでxml要素とその子ノードを文字列に変換する方法は?

問題は、いくつかの奇妙な文字が表示されていることです。最初の要素のテキストコンテンツのみがプレーンテキストであり、残りは奇妙なエンコーディングです。

クイックリファレンスのためにここにコードがあります

Transformer transformer = TransformerFactory.newInstance().newTransformer(); transformer.setOutputProperty(OutputKeys.INDENT, "yes");  
StreamResult result = new StreamResult(new StringWriter()); 
DOMSource source = new DOMSource(node);
transformer.transform(source, result);
String xmlString = result.getWriter().toString(); System.out.println(xmlString); 

入力は以下のようになります

<Info ID="_65ae9406-63c9-4fd5-93a0-5ab1b5a3f3c7"
            IssueInstant="2012-02-11T09:53:52.722Z" Version="2.0"
            xmlns="urn:oasis:names:tc:SAML:2.0:assertion">
            <Issuer>https://localhost:8080/</Issuer>
            <ds:Signature xmlns:ds="http://www.w3.org/2000/09/xmldsig#">
                <ds:SignedInfo>
                    <ds:CanonicalizationMethod
                        Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#" />
                    <ds:SignatureMethod
                        Algorithm="http://www.w3.org/2001/04/xmldsig-more#rsa-sha256" />
                    <ds:Reference URI="#_65ae9406-63c9-4fd5-93a0-5ab1b5a3f3c7">
                        <ds:Transforms>
                            <ds:Transform
                                Algorithm="http://www.w3.org/2000/09/xmldsig#enveloped-signature" />
                            <ds:Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#" />
                        </ds:Transforms>
                        <ds:DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256" />
                        <ds:DigestValue>IDHt1dgdR9k/toaocOxCVMiJhPjqRPyNSou4ywBA2YM=
                        </ds:DigestValue>
                    </ds:Reference>
                </ds:SignedInfo>
                <ds:SignatureValue>o5lTezATnGX+sllItfElMuabaFlpBed8wc8lAieigQ4JiIsgjIdHbg7gyyCpgk</ds:SignatureValue>

            <ds:Signature></Info>
4

2 に答える 2

0

XML ファイルのエンコーディング (例では UTF-8) を指定する XML 宣言を追加してみてください。多分それは役立ちます:)

<?xml encoding="UTF-8"?>
于 2012-05-04T01:02:39.303 に答える
0

見てください:DOMImplementationLS JavaのUTF-8で文字列にシリアライズ

この作品に注目してください:

StringWriter output = new StringWriter();

と:

String xml = output.toString();

上記の例toStringは文字列ライターを呼び出していますstreamResult

その例のように分解してみて、それがうまくいくかどうかを確認してください。

于 2012-05-04T19:59:10.860 に答える