如何使用C#获取XML节点的下一个文本?

时间:2010-01-28 14:30:46

标签: c# xml

我有以下XML。鉴于classname,我需要获得相应的colorcode。我怎样才能在C#中实现这一目标? 否则说,我必须到达一个特定的节点,给出它以前节点的文本。 非常感谢你

<?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>...

4 个答案:

答案 0 :(得分:8)

将xml加载到XmlDocument中,然后执行:

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

答案 1 :(得分:5)

将xml加载到文档中。

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

这将返回您的一个颜色代码或空字符串 正如@Dolphin指出的那样,使用follow-sibling意味着我假设与原始示例中的元素排序相同。

我的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;
}

答案 2 :(得分:0)

Xpath很有用... // skin / color [classname ='。devp1'] / colorcode将返回#413686。将xml加载到XmlDocument中。然后使用.SelectSingleNode方法并使用Xpath,根据需要更改类名。

答案 3 :(得分:0)

XmlDocument.SelectSingleNode是您的解决方案。作为一个例子提供了一个很好的例子。