如何解码CDATA的内容


此方法为我提供了 xml 文件中 CDATA 部分的内容。 但我想解码这个CDATA。CDATA的内容是0和1的组合。 但它们是经过编码的,所以我得到了不同字母的组合,如 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();
            }

        }

解决方案1

看起来数据是 Base64 – 维基百科[^] 编码,这对于 XML 文档中的二进制数据很常见。

然后你必须通过 CDATA 字符串到 Base64 解码器。 请参阅 Convert.FromBase64String 方法(字符串)(系统)[^]。

未经测试的示例(我不确定是否 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();
}

コメント

タイトルとURLをコピーしました