2011-03-16 35 views
0

我有这样的xml文件从不MINDE的信箱。我感兴趣的是内外因素......如果有一个元素在subchild的,我不想在计算taht。xpath选择在xml文件的随机区域中重复的元素的内部文本

<document> 
<tests> 
<group> 
    <number> 
    <random> 
     .... 
     .... 
     <pins> 
     <pin> 
     <number>1</number> 
     </pin> 
     <pin> 
      <number>2</number> 
      <result> 
      <number>NOT INTERESTED</number> 
      </result> 
     </pin> 
    </pins> 
    </random> 
    </number> 
</group> 


我又写道下面的方法来获得我感兴趣(在这种情况下,1和2)

public int GetNumberOfAllPins() 
    { 
     string xpath = "count(/Document//Pins/Pin/Number)"; 
     int num = Convert.ToInt32(nav.Evaluate(xpath)); 
     return num;   
    } 

    public string[] GetNameOfAllPins() 
    { 
     string[] temp = new string[GetNumberOfAllPins()]; 
     XPathNodeIterator it = nav.Select("/Document//Pins/Pin/Number"); 

     int i = 0; 
     while (it.MoveNext()) 
     { 
      temp[i] = it.Current.Value; 
      i++; 
     } 
     return temp; 
    } 

但这些代码让我奇怪的结果有时是我感兴趣的更少或更多的元素。你介意givng一些提示引脚?

谢谢。

+0

请注意,您可以在'XPathNodeIterator'上使用'foreach'。 – 2011-03-16 20:34:27

+0

您的XML具有较小的标签(“pin”,“number”),但您的XPath具有骆驼包装(“Pin”,“Number”)。这是一个错字吗?如果不是,那就是您的答案 - XML和XPath区分大小写。 – 2011-03-16 20:35:51

+0

@Pavel对不起,这是一个错字...请不要介意XML文件的情况我提供的仅供参考 – 2011-03-16 20:40:10

回答

0

对不起,但我解决了这个问题。我的XML文件中有一些相邻的元素。这个代码很好用!

+0

作为一个附注:以这种方式在'GetNameOfAllPins'内构造一个由'GetNumberOfAllPins'确定的长度数组近似于lunacy ...使用'List '而不是简单的'Add'给它。 – 2011-03-16 21:00:55

+0

@Mr。 Dissapointment感谢提示,但我是C#的新手我真的不知道该怎么做。到目前为止,我只是使用了我的PHP技能。你介意给一个代码示例吗?! – 2011-03-16 21:06:31

+0

没问题,这里你去:http://pastebin.com/7ZdinXHf。此外还有其他一些元素你应该考虑。 ;) – 2011-03-16 21:10:53