我正在使用C#.net VS 2013进行此项工作。
我有一个场景,我的结构如下,
labelNode.Attributes["text"].Value
如上所示,我不知道有多少个tspan节点,目前我有3个,我可能会得到4个或更多。
找到文本节点后,要获取该节点的值,我将使用该代码,
labelNode.FirstChild.Attributes["text"].Value
要获取其相邻的tspan节点,我必须像
一样使用它labelNode.FirstChild.FirstChild.Attributes["text"].Value
要获取其相邻的tspan节点,我必须像
一样使用它labelNode.FirstChild.FirstChild.FirstChild.FirstChild.FirstChild.Attributes["text"].Value
像这样它会继续前进。
现在我的问题是,如果我知道我有5个标签,有没有办法动态添加" FirstChild" 5次到" labelNode"这样我就可以得到最后一个节点的文本值,比如这个
<script src="../js/side-menu.json"></script>
如果我需要第二个值,我需要添加2次,如果我需要第3个,那么我需要将它添加三次。
请告诉我有什么解决办法。
如果你对我的问题感到困惑,请问我。
提前感谢你们。
答案 0 :(得分:1)
我认为这不是动态添加FirstChild
,而是一个更简单的解决方案:
static XmlNode GetFirstChildNested(XmlNode node, int level) {
XmlNode ret = node;
while (level > 0 && ret != null) {
ret = ret.FirstChild;
level--;
}
return ret;
}
然后你可以像这样使用这个函数:
var firstChild5 = GetFirstChildNested(labelNode, 5);
答案 1 :(得分:1)
我建议使用Linq
Xml
来更清晰地解析Xml
使用XElement
(或XDocument
),您可以通过调用Descendant
方法展平层次结构并执行所有必需的查询。
ex..
XElement doc= XElement.Load(filepath);
var results =doc.Descendants()
.Select(x=>(string)x.Attribute("text"));
//which returns
abc,
bcd,
def,
gef
如果你想得到最后一个孩子,你可以简单地使用。
ex..
XElement doc= XElement.Load(filepath);
doc.Descendants()
.Last() // get last element in hierarchy.
.Attribute("text").Value
如果你想获得第三个元素,你可以做这样的事情。
XElement doc= XElement.Load(filepath);
doc.Descendants()
.Skip(2) // Skip first two.
.First()
.Attribute("text").Value ;
选中此Demo