0

マトリックス値を含む XML ファイル (どこかから) があり、これを double[][] オブジェクトとしてコードに取り込みたいと考えています。XML には、標準のシリアル化された double[][] オブジェクトのように見えるテーブル ノードが含まれています。

<table type="System.Double[][]"><table type="System.Double[]"><el type="System.Double">0.005</el><el type="System.Double">0.001</el><el type="System.Double">0.007</el><el type="System.Double">-0.012</el></table><table type="System.Double[]"><el type="System.Double">0.033</el><el type="System.Double">-0.146</el><el type="System.Double">-0.008</el><el type="System.Double">0.006</el></table><table type="System.Double[]"><el type="System.Double">-0.002</el><el type="System.Double">-0.004</el><el type="System.Double">-0.004</el><el type="System.Double">-0.003</el></table><table type="System.Double[]"><el type="System.Double">0</el><el type="System.Double">0</el><el type="System.Double">0</el><el type="System.Double">0</el></table></table>

XML 全体がこの形式であるわけではないため、これらのノードのみを XmlNode として抽出します (XElements には InnerXml がないため)。これを と呼びましょうmyMatrixXmlNode。次に、それを MemoryStream に入れ、そこから逆シリアル化します。

var deserializer = new XmlSerializer(typeof(double[][]));
var myMatrix = (double[][])deserializer.Deserialize(new MemoryStream(Encoding.UTF8.GetBytes(myMatrixXmlNode.InnerXml)));

これは私に解決策をまだ見つけていないエラーをスローし<table xmlns=''> was not expected.ます..そして私はこれに本当に悩まされています。


select * from unbld_usage_sum where event_data like '%'+(select sbscrp_id from sbscrp_asgm where acct_nbr='0032581922')+'%';

4

2 に答える 2

2

おそらく、次のように XDocument を使用して解析するのが最善です:-

    var d = XDocument.Parse(testXml);
    var r = d.Element("table");

    var listOfDoubleArrays = new List<double[]>();
    foreach (var outerArrayItem in r.Elements())
    {
        double[] arr = new double[r.Elements().Count()];
        int i = 0;
        foreach (var innerArrayItem in outerArrayItem.Elements())
        {
            arr[i] = System.Convert.ToDouble(innerArrayItem.Value);
            i++;
        }
        listOfDoubleArrays.Add(arr);
    }
    double[][] result = listOfDoubleArrays.ToArray();
于 2013-01-09T11:35:03.950 に答える
1

この Xml を に逆シリアル化するために、標準の Xml シリアライザーを使用することはできませんdouble[][]

double[][]Xml シリアル化の形式は次のようになります。

<ArrayOfArrayOfDouble xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance'     xmlns:xsd='http://www.w3.org/2001/XMLSchema'>
  <ArrayOfDouble>
    <double>1</double>
  </ArrayOfDouble>
  <ArrayOfDouble>
    <double>2</double>
  </ArrayOfDouble>
</ArrayOfArrayOfDouble>

LinqToXml を使用して thos Xml を手動で解析するか、対応する形式に変換してみてください。

于 2013-01-09T10:22:01.047 に答える