2016-03-21 4 views
-1

У меня есть следующая структура XML для карточной игры. Я хочу, чтобы данные и описания карт были загружены в два массива, которые я могу использовать для рандомизации карт.Как читать XML-файл

<Cards> 
     <CardTitles> 
     <Title>Some Title</Title> 
        . 
        . 
        . 
        . 
        . 
    </CardTitles> 
    <CardDesc> 
     <Desc>Some description</Desc> 
    </CardDesc> 
    </Cards> 

Но независимо от того, что я делаю или какой код я пишу, я не могу получить фактический текст из соответствующего тега. Ближайший я получил следующий пример: https://msdn.microsoft.com/en-us/library/system.xml.xmlreader.readsubtree(v=vs.110).aspx

Я знаю, что я не должен просить полные решения, но я просто в тупике. Любая помощь в том, чтобы этот вопрос прояснился мне, будет отличным.

+1

Что именно вы возникли проблемы с? Должно быть буквально сотни примеров и вопросов по этой теме – Patrick

+0

@Patrick. Есть, но я просто не могу обмотать свой слух вокруг них. Все, что я хочу, - это получить внутренний текст всех тегов заголовков, например, в массив строк. –

+0

Ну, если это * точная структура xml, вы, вероятно, получите ошибку. У вас есть незакрытый тег Title и точки в середине его. Это недопустимо ... – Patrick

ответ

1

Предположив, что у вас есть файл XML с именем sample.xml в C: \ TEMP вы можете использовать LINQ к XML:

XElement x = XElement.Load (@"c:\temp\Sample.xml"); 

    IEnumerable<string> titles = from title in x.Element("CardTitles").Elements() 
           select title.Value; 
    IEnumerable<string> descriptions = from description in x.Element("CardDesc").Elements() 
             select description.Value; 
+0

ОК. это похоже на действительно прямое решение. Вопрос: будет ли это работать с проектом unity3d и будет ли он работать как на iOS, так и на Android? –

-1

Вместо того, чтобы идти по маршруту XmlReader, вы можете использовать XmlSerializer, который намного проще и прост в использовании.

https://msdn.microsoft.com/en-us/library/58a18dwa(v=vs.110).aspx

Вы бы что-то вроде этого:

<Cards> 
     <CardTitles> 
     <Title>Some Title</Title> 
    </CardTitles> 
    <CardDesc> 
     <Desc>Some description</Desc> 
    </CardDesc> 
</Cards> 

классов .NET

public class Cards { 
    public CardTitles CardTitles; 
    public CardDesc CardDesc; 
} 

public class CardTitles { 
    public String Title; 
} 

public class CardDesc { 
    public String Desc; 
} 

И затем использовать XmlSerializer.Deserialize метод.

XmlSerializer xmlSerializer = new XmlSerializer(typeof(Cards)); 
StringReader inputStrReader = new StringReader(inputString); 
Cards cards = (Cards)xmlSerializer.Deserialize(inputStrReader);