使用xPath获取兄弟

时间:2011-06-22 03:09:25

标签: c# .net xpath

我目前正在开发一个返回2个兄弟节点的.net C#解决方案。使用Xpath 1.0

我的xml doc的一个小例子就是:

<PLAY>
 <SCENE>
  <SPEAKER>
  </SPEAKER>
  <LINE>
  </LINE>
  </SCENE>
</PLAY>

我使用以下代码来获取线和扬声器,但我不知道为什么我得到整个xml doc传入而不仅仅是兄弟(扬声器)

我有:

List speakers = new List();

XmlDocument myDoc = new XmlDocument();
myDoc.Load(textXMLFile.Text.ToString());
// Clear the text box...
textResults.Text = "";

// ADD THIS...
XPathNavigator theNav = myDoc.CreateNavigator();
XPathNavigator theNav2 = myDoc.CreateNavigator();

//XmlNodeList theNodes =
//    myDoc.SelectNodes(textXPath.Text.ToString());

textXPath.Text = "//SPEECH/LINE";
string val = "//SPEECH/SPEAKER";
XPathNodeIterator theNodes = theNav.Select(textXPath.Text.ToString());
XPathNodeIterator theNodes2 = theNav2.Select(val);

StringBuilder output = new StringBuilder();

while (theNodes.MoveNext())
{
    if (theNodes.Current.InnerXml.ToString() == "Upon my sword.")
    {
        break;
    }
    else
    {
        speakers.Add(theNodes2.Current.InnerXml.ToString());
        speakers.Add(theNodes2.Current.InnerXml.ToString());
    }
}
for (int i =0; i < speakers.Count; ++i)
{
    output.Append (speakers[i]+" ");
}
MessageBox.Show(""+output);

theNodes.Current.InnerXml.ToString()适用于返回行,但theNodes2.Current.InnerXml.ToString()似乎返回整个XML而不是扬声器。

感谢任何意见或建议。

2 个答案:

答案 0 :(得分:1)

在盯着这一段时间之后,我完全错过了我需要在while循环中移动节点2这样

while(theNodes2.MoveNext())

全部谢谢

答案 1 :(得分:0)

// SPEECH / LINE不会在文档中找到任何名称为“play”,“scene”,“speaker”和“line”的元素。请在设计问题时尽量小心。 Downvoting。