2015-10-20 3 views
0

Я использую в моем проекте такой библиотеки для XML парсинга:Dlang kxml getCData использование

https://github.com/opticron/kxml/blob/master/source/kxml/xml.d

Вот мой пример кода:

void main() 
{ 
    string xmlstring = cast(string)read("test.xml"); 
    XmlNode newdoc = xmlstring.readDocument(); 
    XmlNode[] searchlist = newdoc.parseXPath("//instancesSet/item"); 

    foreach(list, searchlist) 
    { 
    string test = list.parseXPath("//instanceId").getCData(); 
    writeln(test); 
    } 
} 

И не хочу, чтобы скомпилировать :

$ dub 
Performing "debug" build using dmd for x86_64. 
kxml 1.0.0: target for configuration "library" is up to date. 
test ~master: building configuration "application"... 
source/app.d(23,56): Error: no property 'getCData' for type 'XmlNode[]' 
dmd failed with exit code 1. 

Когда я использую foreach цикл я думал, что это беря только одно значение из целого массива. Поэтому, если это массив переменной XmlNode[], только один из них должен быть равен XmlNode (а не массиву).

Почему он все еще видит массив? Как использовать метод getCData() для очистки переменной из тегов и поместить ее в string?

ответ

1

В петле list фактически является XmlNode, но его parseXPath() возвращает XmlNode[]. Если вы хотите работать только с первым результатом запроса XPath в каждом list, просто добавьте [0].

string test = list.parseXPath("//instanceId")[0].getCData();