現在、2つの兄弟ノードを返す.net C#ソリューションを開発中です。 XPath 1.0のxPathを使用して兄弟を取得する
を使用して、私のXML文書の小さな例がこれです:
<PLAY>
<SCENE>
<SPEAKER>
</SPEAKER>
<LINE>
</LINE>
</SCENE>
</PLAY>
私はラインとスピーカーを取得するには、次のコードを使用していますが、私は私が渡されている全体のXMLドキュメントを取得する理由を知りません中だけではなく兄弟(スピーカー)
私が持っている:
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全体を返すようです。
ご意見やご提案をいただければ幸いです。
これらの 'speakers.Add'行は' speakers.Add(theNodes.Current.InnerXml.ToString()); 'になりますか?今は両方とも 'theNodes2'を使っています。 –
Xmlの はどのレベルですか? –
私は実際にそれを理解する。私はwhileループでtheNodes2もループする必要があった。皆さんありがとう。私は答えとして投稿するが、私は自分の質問に答えるのに十分な担当者がいない:( – Johnston