【问题标题】:Linq to XML (Base64 Encoded)Linq to XML(Base64 编码)
【发布时间】:2009-06-17 21:32:38
【问题描述】:

我必须将 PDF 转换为 Base64 编码并将其写入 XML 文件中的元素。
我有 Base64 编码字符串(非常长/大),但我正在使用的规范说明如下:

已选择此选项,以确保 XML 文件可以显示和验证而没有任何潜在的可能 处理原始 JPEG 文件的原始二进制组合引起的问题。文件数据应显示 在兼容 XML 的浏览器(例如 Internet Explorer)中正确显示。数据必须以固定的 76 个字符行显示,每行用换行符分隔。
第一个问题是关于 JPEG 的一点如果我使用 pdf 是否有效?

其次不知道如何实现这一点:数据必须以固定的 76 个字符行显示,每行用换行符分隔。
如何使用 Linq to XML 实现这一点

【问题讨论】:

    标签: xml linq linq-to-xml


    【解决方案1】:
    Convert.ToBase64String(pdfBytes, Base64FormattingOptions.InsertLineBreaks);
    

    【讨论】:

      【解决方案2】:

      由于插入,这不是一个非常有效的解决方案(最好通过从编码文件内容中添加 76 个字符,然后是一个新行,然后是 76 个字符,然后又是一个新行来构建字符串,. ..) 但它很短并且展示了总体思路。如果内存使用和性能是一个问题,还可以考虑用直接将字节编码为StringBuilder 的代码替换Convert.ToBase64String() 调用。

      public static XElement BuildNode(Byte[] data, XName tagName, Int32 lineLength)
      {
          StringBuilder sb = new StringBuilder(Convert.ToBase64String(data));
      
          Int32 position = 0;
      
          while (position < sb.Length)
          {
              sb.Insert(position, Environment.NewLine);
              position += lineLength + Environment.NewLine.Length;
          }
      
          sb.AppendLine();
      
          return new XElement(tagName, sb.ToString());
      }
      

      例如

      String text = "I have got to convert a PDF to a Base64 Encoded " +
                    "and write it to a element in a XML file.";
      
      Byte[] data = Encoding.UTF8.GetBytes(text);
      
      StringBuilder sb = new StringBuilder();
      TextWriter tw = new StringWriter(sb);
      
      using (var writer = new XmlTextWriter(tw) { Formatting = Formatting.Indented })
      {
          XDocument document = new XDocument(BuildNode(data, "Content", 40));
      
          document.Save(writer);
      }
      
      Console.WriteLine(sb.ToString());
      

      打印以下内容。

      <?xml version="1.0" encoding="utf-16"?>
      <Content>
      SSBoYXZlIGdvdCB0byBjb252ZXJ0IGEgUERGIHRv
      IGEgQmFzZTY0IEVuY29kZWQgYW5kIHdyaXRlIGl0
      IHRvIGEgZWxlbWVudCBpbiBhIFhNTCBmaWxlLg==
      </Content>
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-02-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多