字符串输出Xml

public virtual void ExportXml()
        {
            StringBuilder sb = new StringBuilder();
            StringWriter stringWrite = new StringWriter(sb);
            var xmlWrite = new XmlTextWriter(stringWrite);


            xmlWrite.WriteStartDocument();
            xmlWrite.WriteStartElement("nopWriteXml");
            xmlWrite.WriteElementString("Name", "13123");
            xmlWrite.WriteElementString("Description", "SEName");
            xmlWrite.WriteElementString("Manufacturer","ADJK");
            xmlWrite.WriteElementString("MetaKeywords", "PictureId");
            xmlWrite.WriteElementString("MetaDescription", "PageSize");
            xmlWrite.WriteElementString("MetaTitle", "PageSizeOptions");
            xmlWrite.WriteEndElement();


            xmlWrite.WriteEndDocument();
            xmlWrite.Close();


            var xmlString = stringWrite.ToString();
            var docment = new XmlDocument();
            docment.LoadXml(xmlString);
            HttpContext.Response.Charset = "utf-8";
            HttpContext.Response.ContentType = "text/xml";
            HttpContext.Response.BinaryWrite(Encoding.UTF8.GetBytes(docment.InnerXml));
            HttpContext.Response.End();
          
        }
### 将PEM格式字符串转换为XML格式 要实现从PEM格式到XML格式的转换,通常涉及以下几个方面的工作: #### 1. 解析 PEM 字符串 PEM 文件通常是 Base64 编码后的 ASCII 文本文件,其中包含了特定类型的对象(如公钥、私钥或证书)。解析这些文件的第一步是从文本中提取出实际的数据部分。 对于 RSA 公钥而言,在 Java 中可以利用 `java.security` 和 BouncyCastle 库来完成这一操作。BouncyCastle 是一个强大的加密库,提供了丰富的 API 来处理各种形式的密钥和证书[^3]。 ```java import org.bouncycastle.asn1.pkcs.RSAPublicKey; import org.bouncycastle.util.io.pem.PemObject; import org.bouncycastle.util.io.pem.PemReader; public class PemToXmlConverter { public static RSAPublicKey readPublicKeyFromPem(String pemContent) throws Exception { try (StringReader reader = new StringReader(pemContent); PemReader pemReader = new PemReader(reader)) { PemObject pemObject = pemReader.readPemObject(); byte[] content = pemObject.getContent(); // Assuming the object is an RSA Public Key return RSAPublicKey.getInstance(content); } } } ``` #### 2. 构建 XML 表示 一旦获得了原始的密钥材料,下一步就是将其构造成符合预期结构的 XML 片段。这可以通过简单的模板化方式或者更复杂的 DOM 操作来达成。下面是一个简单的方法,它创建了一个包含模数 (`Modulus`) 和指数 (`Exponent`) 的 `<RSAKeyValue>` 节点[^1]。 ```java import javax.xml.parsers.DocumentBuilderFactory; import javax.xml.transform.TransformerFactory; import javax.xml.transform.dom.DOMSource; import javax.xml.transform.stream.StreamResult; import java.math.BigInteger; public class PemToXmlConverter extends Object{ private static Document createRsaKeyValueDocument(RSAPublicKey rsaPubKey){ BigInteger modulus = rsaPubKey.getModulus(); BigInteger exponent = rsaPubKey.getPublicExponent(); try { var docBuilderFac = DocumentBuilderFactory.newInstance(); var document = docBuilderFac.newDocumentBuilder().newDocument(); Element rsaKeyValueElm = document.createElement("RSAKeyValue"); document.appendChild(rsaKeyValueElm); appendElementWithText(document, rsaKeyValueElm, "Modulus", encodeBase64(modulus.toByteArray())); appendElementWithText(document, rsaKeyValueElm, "Exponent", encodeBase64(exponent.toByteArray())); return document; } catch (Exception e) { throw new RuntimeException(e); } } private static void appendElementWithText(Document doc, Node parent, String tagName, String textValue) { Element element = doc.createElement(tagName); Text textNode = doc.createTextNode(textValue); element.appendChild(textNode); parent.appendChild(element); } private static String encodeBase64(byte[] bytes) { // Implement or use a library method to perform base64 encoding. return ""; } } ``` 请注意上述代码片段中的 `encodeBase64()` 方法需要具体实现;这里假设存在某种方法能够执行 BASE64 编码工作。此外,还需要引入必要的异常处理逻辑以确保程序健壮性。 最后一步是将构建好的文档序列化为字符串输出给调用者。这部分可以通过标准的 JAXP 接口轻松完成[^2]。 ```java import javax.xml.transform.OutputKeys; import javax.xml.transform.Transformer; import javax.xml.transform.TransformerException; import javax.xml.transform.TransformerFactory; import javax.xml.transform.dom.DOMSource; import javax.xml.transform.stream.StreamResult; import java.io.StringWriter; // ... Transformer transformer = TransformerFactory.newInstance().newTransformer(); transformer.setOutputProperty(OutputKeys.INDENT, "yes"); DOMSource source = new DOMSource(createRsaKeyValueDocument(publicKey)); StringWriter writer = new StringWriter(); StreamResult result = new StreamResult(writer); try { transformer.transform(source, result); } catch (TransformerException ex) { System.err.println("Error during transformation."); } System.out.println(writer.toString()); ``` 通过这种方式,可以从给定的 PEM 格式的 RSA 公钥生成相应的 XML 描述,并最终打印出来供进一步使用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值