动态创建XML节点以获取其属性值

时间:2016-06-08 06:56:12

标签: c# xml

我正在使用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个,那么我需要将它添加三次。

请告诉我有什么解决办法。

如果你对我的问题感到困惑,请问我。

提前感谢你们。

2 个答案:

答案 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