我目前正在开发一个返回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而不是扬声器。
感谢任何意见或建议。
答案 0 :(得分:1)
在盯着这一段时间之后,我完全错过了我需要在while循环中移动节点2这样
while(theNodes2.MoveNext())
全部谢谢
答案 1 :(得分:0)
// SPEECH / LINE不会在文档中找到任何名称为“play”,“scene”,“speaker”和“line”的元素。请在设计问题时尽量小心。 Downvoting。