我有以下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>...
答案 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是您的解决方案。作为一个例子提供了一个很好的例子。