Linq to XML (в кодировке Base64) - PullRequest
0 голосов
/ 18 июня 2009

Мне нужно преобразовать PDF в кодированный Base64 и записать его в элемент XML-файла.
Я получил закодированную строку Base64 (очень длинную / большую), но спецификация, из которой я работаю, говорит следующее:

Это было выбрано, чтобы гарантировать, что файл XML может отображаться и проверяться без какого-либо потенциала проблемы, вызванные обработкой необработанной двоичной композиции исходного файла JPEG. Данные файла должны отображаться правильно в XML-совместимом браузере, таком как Internet Explorer. Данные должны быть представлены в фиксированных 76 символьных строках, каждая строка должна быть разделена разрывом строки.
Первый вопрос о том, что JPEG имеет смысл, если я использую PDF?

Во-вторых, не уверен, как этого добиться: данные должны быть представлены в фиксированных 76 символьных строках, каждая строка должна быть разделена разрывом строки.
Как я могу добиться этого с помощью Linq to XML

Ответы [ 2 ]

3 голосов
/ 18 июня 2009
Convert.ToBase64String(pdfBytes, Base64FormattingOptions.InsertLineBreaks);
1 голос
/ 18 июня 2009

Это не очень эффективное решение из-за вставок (вероятно, было бы лучше построить строку, добавив 76 символов из содержимого закодированного файла, затем новую строку, затем 76 символов, затем снова новую строку, ..) но это коротко и демонстрирует общую идею. Если использование памяти и производительность являются проблемой, можно подумать о замене вызова Convert.ToBase64String() кодом, который непосредственно кодирует байты в StringBuilder.

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>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...