【问题标题】:Getting weird characters when converting from XML Element and its child nodes to String in Java从 XML Element 及其子节点转换为 Java 中的 String 时得到奇怪的字符
【发布时间】:2023-03-03 16:41:01
【问题描述】:

我使用下面链接中提到的转换器代码将 xml 元素及其子元素转换为 xml 字符串

How to convert xml Element and its child nodes into String in Java?

问题是我看到了一些奇怪的字符,只有第一个元素的文本内容是纯文本,其余的是一些奇怪的编码

这里是代码供快速参考

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>

【问题讨论】:

  • 输入是什么样的?

标签: java xml


【解决方案1】:

尝试添加一个 XML 声明,指定 XML 文件的编码(示例中为 UTF-8)。也许它有帮助:)

<?xml encoding="UTF-8"?>

【讨论】:

  • 我贴的xml其实是org.w3c.dom.Element的内容,所以没办法加声明
【解决方案2】:

看:DOMImplementationLS serialize to String in UTF-8 in Java

注意这一段:

StringWriter output = new StringWriter();

和:

String xml = output.toString();

上面的例子是在字符串写入器上调用toString,你在streamResult上调用它。

尝试像那个例子那样打破它,看看它是否适合你。

【讨论】:

  • 没有同样的问题,没有帮助。感谢您的宝贵时间
猜你喜欢
  • 2011-07-20
  • 2010-10-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-01-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多