2017-05-26 62 views
0

我曾經遇到一個問題,乍一看似乎很簡單,但我非常困難。從XML C中讀取數據時轉換數據#

我有一個包含以下數據的XML文件:

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

我的任務是在這些人從XML讀取並把它們放在一個特定的類

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

    public int Floor { get; set; } 
} 

問題的對象是有些人在xml的房間字段中有一個空的數據,有些人的數字被'/'或'''s分隔。

我試圖通過

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

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

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

去,這是我有問題。我需要以某種方式將房間字符串轉換爲一個floor 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; 
    } 
} 

和使用這樣

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) 
     }; 

然後你就可以處理你越過參數值(NULL,而不是解析值),或者你可能更願意返回一個類型像ParseResult和處理空和not parsed sta

+0

多謝你,我曾經在此基礎上的一個靜態方法,並用它作爲一個轉換器。 – user3365304