2010-01-28 76 views
3

我有以下XML。鑑於類名,我需要獲取其相應的顏色代碼。我怎樣才能在C#中完成這項工作? 否則說,我必須得到一個特定的節點,給定它的前一個節點的文本。 非常感謝您如何使用C#獲取XML節點的下一個文本?

<?xml version="1.0" encoding="ISO-8859-1" standalone="yes"?> 
<?xml-stylesheet type='text/xsl' href='template.xslt'?> 
<skin name="GHV--bordeaux"> 
    <color> 
    <classname>.depth1</classname> 
    <colorcode>#413686</colorcode> 
    </color> 
    <color> 
    <classname>.depth2</classname> 
    <colorcode>#8176c6</colorcode> 
    </color>... 

回答

8

加載你的XML到XmlDocument,然後做:

document.SelectSingleNode("/skin/color[classname='.depth1']/colorcode").InnerText 
0

Xpath的將是有益的... //皮膚/顏色[類名=」 .depth1' ] /顏色代碼將返回#413686。將你的xml加載到一個XmlDocument中。然後使用.SelectSingleNode方法並使用Xpath,根據需要更改類名。

5

將您的xml加載到文檔中。

var color = document.CreateNavigator().Evaluate("string(/skin/color/classname[. = '.depth']/following-sibling::colorcode[1])") as string; 

這將返回一個顏色代碼或一個空字符串。
正如@Dolphin所指出的那樣,使用跟隨 - 同胞意味着我假設原始示例中的元素排序相同。

我的LINQ的版本似乎稍微詳細:

var classname = ".depth1"; 
var colorcode = ""; 

XElement doc = XElement.Parse(xml); 

var code = from color in doc.Descendants("color") 
    where classname == (string) color.Element("classname") 
    select color.Element("colorcode"); 

if (code.Count() != 0) { 
    colorcode = code.First().Value; 
} 
+0

如果類名/的ColorCode的順序並不總是相同的例子這將失敗。 – Dolphin 2010-01-28 15:08:19