hamid18 Ответов: 1

Как расшифровать содержимое CDATA


Этот метод дает мне содержимое раздела CDATA в xml-файле. Но я хочу, чтобы декодировать этот тип CDATA.Содержимое CDATA-это сочетание 0s и 1S. Но они закодированы, так что я получаю комбинацию различных алфавитов, таких как ABC12KJ и т. д...
Как я могу получить декодированные данные? ?
Спасибо..
вот пример файла
<?xml version="1.0" encoding="UTF-8"?>
<TesterLog Version="1">
  <TestProperties>
    <Item name="IUT Name" value="Reference"/>
  </TestProperties>
  <SignalData SamplingPeriod="1000.000 ns" DataWidth="16 bit">
    <Signal>
      <Id>IUT_RX</Id>
      <InitState>1</InitState>
      <![CDATA[HQFPAVkBiwGVAZ8BqQHHAdEBAwINAjUCPwJxAnsCrQK3AsEC1QLzAv0CEQMbAzkDTQNrA3UDfwOJA7sDxQPtA/cDKQQzBEcEUQSDBI0EtQTJBN0E5wTxBAUFDwUZBS0FNwVBBUsFVQWHFZEVmxWlFa8VuRXDFc0V1xXhFesV9RX/FTEWOxZFFk8WgRaLFpUWnxapFscW0RbbFuUW7xYDFyEXPxdJF1MXGhgkGC4YTBhWGHQYfhiwGLoY2BjiGBQZHhkoGTIZUBlaGXgZghmgGaoZvhnbGeUZ9RwTHR0dTx1ZHYsdlR29Hccd+R0DHg0eFx5JHlMeZx6ZHsEe6R4lH5Qfsh+8H+4f+B8qIDQgXCBmIJggoiCsILYg6CDyIAYhOCFgIYghxCEzIlEiWyKNIpciySLTIvsiBSM3I0EjSyNVI4cjmyOlI9cj/yMTJB0kpyaxJrsmxSbPJgEnCyc9J0cnZSdvJ6EnqyfdJ+cnGSgjKC0oQShLKF8ocyiHKJsopSivKLkowyjWKOAo8jQkNS41YDVqNZw1pjXENc41ADYKNhQ2HjZGNlA2WjZkNm42eDaWNqo2tDbHNtE2uDd=]]>
    </Signal>
    <Signal>
      <Id>CCT_TX</Id>
      <InitState>1</InitState>
      <![CDATA[HQFPAVkBiwGVAZ8BqQHHAdEBAwINAjUCPwJxAnsCrQK3AsEC1QLzAv0CEQMbAzkDTQNrA3UDfwOJA7sDxQPtA/cDKQQzBEcEUQSDBI0EtQTJBN0E5wTxBAUFDwUZBS0FNwVBBUkXUxfbGeUZ1ijgKMc20Ta4N0==]]>
    </Signal>
//////////////////////////////////////////////////////////////////////////////////////////////////////
  </SignalData>
</TesterLog>


Что я уже пробовал:

public void GetCDATA()
        {
            var xdoc = XDocument.Load(xmlfilepath);
            var queryCDATAXML = xdoc.DescendantNodes().OfType<XCData>();

            foreach (var item in queryCDATAXML)
            {
                Console.WriteLine(item);
                Console.WriteLine();
            }

        }

Graeme_Grant

небольшая проблема, недопустимый XML. Изменить

</CanConformanceTesterLog>
к
</TesterLog>

1 Ответов

Рейтинг:
4

Jochen Arndt

Похоже, что данные таковы Base64 - Википедия[^] кодируется, что является общим для двоичных данных в XML-документах.

Тогда вы должны пройти CDATA строки для декодера base64. См. Метод Convert.FromBase64String (String) (System)[^].

Непроверенный пример (я не знаю точно, если item это String):

foreach (var item in queryCDATAXML)
{
    byte[] cdata = Convert.FromBase64String(item);
    // Binary data so we have to convert them for display
    Console.WriteLine("   {0}\n", BitConverter.ToString(cdata));
    Console.WriteLine();
}


hamid18

элемент-XCData.. так что не переводите продукт в массив Byte [] разделы CDATA..

Jochen Arndt

До сих пор я этим не пользовался, но быстрое веб-исследование предполагает, что вам просто нужно использовать свойство Value:
byte[] cdata = Convert.FromBase64String(item.Value);

hamid18

тем не менее я не получаю требуемого вывода ... это все еще закодированный вывод...

Jochen Arndt

Что вы подразумеваете под словом "требуется"?

Если элемент не имеет типа string, ваш исходный код тоже не будет работать.
Является
WriteLine(item.Value);
печать данных, как показано в вашем XML-файле?

Чем декодирование, то есть двоичный результат и печать с помощью BitConverter должны дать вам строку с шестнадцатеричными значениями.

Но это только для проверки. Для дальнейшей обработки вы должны использовать массив байтов. Но я не знал, что представляют собой эти данные и как их следует использовать.

Если вам нужны, например, одиночные биты, вы должны перебирать массив, а для каждого байта перебирать 8 битов.

hamid18

спасибо.. я понял...