我试图隔离下面 XML 中<string>每个元素中的元素。<question>我使用的是我最熟悉的Xpath。基本上,我使用 a SelectNodes("question"),如果指向下面的 XML,它将返回正确的 5 个元素。然后我想迭代<string>每个 内的元素<question>。我不想直接转到“问题/字符串”,因为它将返回<string>XML 文件中的所有实例。我有一些工作要做,其中未包含在此处,实际文件比这复杂得多,但这就是我正在努力解决的问题。这是我使用的代码。它返回<string>文件的所有元素,而不仅仅是我在任何给定时刻正在使用的节点。XmlNodeList questions = doc.SelectNodes("//question");string question = null;foreach (XmlElement qquestion in questions) //I also tried XmlNode here{ XmlNodeList qstrings = qquestion.SelectNodes("//string"); foreach (XmlNode qstring in qstrings) { question = qstring.InnerText; //There's a lot more processing I'll do here } }这是我的简化 XML。感谢您的指点。<content version="1.0"> <question> <string>Question 1 part 1</string> <string>Question 1 part 2</string> <graphic scale=".8" align="center" yOffset="-50" xOffset="50" asset="Numline_Triangle"/> <graphic scale="1.2" align="center" yOffset="20" asset="Numline_Shapes_0_40"/> </question> <question> <string>Question 2</string> <graphic scale=".8" align="center" yOffset="-50" xOffset="50" asset="Numline_Square"/> <graphic scale="1.2" align="center" yOffset="20" asset="Numline_Shapes_0_40"/> </question> <question> <string>Question 3 part 1</string> <string>Question 3 part 2</string> <graphic scale=".8" align="center" yOffset="-50" xOffset="50" asset="Numline_Square"/> <graphic scale="1.2" align="center" yOffset="20" asset="Numline_Shapes_60_100"/> </question> <question> <string>Question 4</string> <graphic scale=".8" align="center" yOffset="-50" xOffset="50" asset="Numline_Circle"/> <graphic scale="1.2" align="center" yOffset="20" asset="Numline_Shapes_60_100"/> </question> <question> <string>Question 5</string> <graphic scale=".8" align="center" yOffset="-50" xOffset="50" asset="Numline_Triangle"/> <graphic scale="1.2" align="center" yOffset="20" asset="Numline_Shapes_60_100"/> </question> </content>
1 回答
一只斗牛犬
TA贡献1784条经验 获得超2个赞
它返回<string>文件的所有元素,而不仅仅是我在任何给定时刻正在使用的节点。
是的。这是正确的行为,因为//string返回所有全局存在的string元素。
要仅返回所有后代 元素,只需在 XPath-1.0 表达式的开头string添加 a ,如下所示:.
...
XmlNodeList qstrings = qquestion.SelectNodes(".//string");
foreach (XmlNode qstring in qstrings)
{
question = qstring.InnerText; //There's a lot more processing I'll do here
}
...
该表达式返回当前 XmlNode 的后代.//string的所有元素。stringqquestion
- 1 回答
- 0 关注
- 142 浏览
添加回答
举报
0/150
提交
取消