猿问

C# 中的嵌套 Xml 节点列表

我试图隔离下面 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>


慕田峪7331174
浏览 143回答 1
1回答

一只斗牛犬

它返回<string>文件的所有元素,而不仅仅是我在任何给定时刻正在使用的节点。是的。这是正确的行为,因为//string返回所有全局存在的string元素。要仅返回所有后代 元素,只需在 XPath-1.0 表达式的开头string添加 a ,如下所示:....XmlNodeList qstrings = qquestion.SelectNodes(".//string");foreach (XmlNode qstring in qstrings){&nbsp; question = qstring.InnerText; //There's a lot more processing I'll do here}...该表达式返回当前 XmlNode 的后代.//string的所有元素。stringqquestion
随时随地看视频慕课网APP
我要回答