2017-05-26 3 views
0

一見したように簡単に見える問題が発生しましたが、私は非常に固執しています。XMLからの読み込み中にデータを変換するC#

は、私は、次のデータを含むXMLファイルを持っている:

私のタスクは、XMLから、これらの人々に読んで、特定のクラス

class Person 
{ 
    public string Name { get; set; } 

    public int Floor { get; set; } 
} 

問題のオブジェクトにそれらを置くことです

<person> 
    <name>John</name> 
    <room>C.2.12</room> 
</person> 

いくつかの人々はxmlのルームフィールドで空のデータを持っており、一部の人々は '/' - sまたは '、' - sで分割された数字を持っています。

私は

XDocument doc = Xdocument.Load("data.xml"); 

var q = from item in doc.Descendants("person") 

select new Person() { Name = item.Element("name").Value, 

で行くしようと、私は問題を抱えている場所です。私は何とか部屋の文字列を床のintに変換する必要があります。フロアは、xmlのルームフィールドの最初の番号にする必要があります。

アイデア?

+0

あなたはどの言語をプログラミングしていますか? –

+0

申し訳ありませんが、Cのことを忘れてしまいました。 – user3365304

+0

"C.2.12"に変換する整数値は?基本的に、この質問についてはXML特有のものはほとんどありません。文字列をカスタム方法でintに変換するだけです。その部分を手に入れたら、残りの部分は簡単になります。そのため、あなたは何をしようとしているのかについての詳細をすべて示しながら、その変換の上にある*の*だけの質問を編集してください。 –

答えて

0

このようなパーサ関数を宣言することができます。

int ParseRoomNumberToInt(string roomValue, int nullValue, int notParsedValue) 
{ 
    if (roomValue == null) 
     return nullValue; 

    int result = 0; 
    var numericParts = Enumerable.Where(roomValue, (arg) => char.IsNumber(arg)).ToArray(); 
    if (int.TryParse(new string(numericParts), out result)) 
    { 
     return result; 
    } 
    else 
    { 
     return notParsedValue; 
    } 
} 

とその後あなたはパラメータを介して渡された値(ヌルと解析されていない値)を扱うことができるか、ParseResultのようなタイプを返し、nullを扱うことを好むことがあり、この

var xmlText = "<person><name>John</name><room>C.2.12</room></person>"; 
var document = XDocument.Parse(xmlText); // or Load from source 
var q = from item in document.Descendants("person") 
     select new Person() { 
       Name = item.Element("name").Value, 
       Floor = ParseRoomNumberToInt(item.Element("room")?.Value, -1, -2) 
     }; 

のように使用し、解析されていない状態

+0

ありがとう、私はこれに基づいて静的メソッドを使用し、コンバータとして使用されます。 – user3365304

関連する問題