2012-01-31 4 views
1

Как мы можем получить текст между узлами XMLполучает текст между XMLNodes

<company> 
<data id="14" />{<data id="15" />DOCUMENT<data id="23" />pet<data id="24" />DOCUMENT<data id="25" /> 
</company> 

мне нужны данные между идентификатором 23 и 25 (то есть домашнее животное ДОКУМЕНТА)

я загрузил этот XML в xmldoc

Просьба предложить

ответ

2

Вы можете использовать LINQ:

XDocument doc = XDocument.Parse(@"<company>...</company"); 

string result = string.Join(" ", 
    doc.Root 
     .Nodes() 
     .SkipWhile(n => n.NodeType != XmlNodeType.Element || 
         (int)((XElement)n).Attribute("id") != 23) 
     .TakeWhile(n => n.NodeType != XmlNodeType.Element || 
         (int)((XElement)n).Attribute("id") != 25) 
     .OfType<XText>()); 

// result == "pet DOCUMENT" 
+0

Какая часть получает текст? – DotnetSparrow

0

Dim tDoc as XmlDocument = new XmlDocument 
Dim tNodes As XmlNodeList = Nothing 

tDoc.Load(path_to_xml_file) ' Or .LoadXml(xml_string) 
tNodes = tDoc.SelectNodes("//data") 

For Each tNode As XmlNode In tNodes 
    Select Case tNode.Attributes("id").value 
    Case 23, 24, 25 
     ' Do your processing here 
    End Select 
Next 

EDIT Я неправильно прочитал XML. Так или иначе ... Я не знаю, о получении текста между определенными идентификаторами узлов .. но вы можете получить весь текст с tDoc.SelectSingleNode("//company").InnerText

+0

мне нужен текст между тезисы узлов. как я могу получить текст? – DotnetSparrow

0
XDocument doc = XDocument.Parse(@"<company>...</company"); 

string result = string.Join(" ", 
    doc.Root 
     .Nodes() 
     .SkipWhile(n => n.NodeType != XmlNodeType.Element || 
         (int)((XElement)n).Attribute("id") != 23) 
     .TakeWhile(n => n.NodeType != XmlNodeType.Element || 
         (int)((XElement)n).Attribute("id") != 25) 
     .OfType<XText>()); 
Смежные вопросы