代码之家  ›  专栏  ›  技术社区  ›  Paulo Hgo

C中嵌套的XML节点列表#

  •  0
  • Paulo Hgo  · 技术社区  · 5 年前

    我正试图孤立 <string> 每个元素中的元素 <question> 以下XML中的元素。 我使用了XPath,这是我最熟悉的。基本上,我使用 SelectNodes("question") 如果指向下面的XML,它将返回正确的5个元素。然后我想重复 <字符串> 每个单元内的元素 <问题> . 我不想直接转到“问题/字符串”,因为它将返回所有 <字符串> XML文件中的实例。我有一些工作要做,在一个特定的问题,没有包括在这里,实际的文件比这复杂得多,但这是我正在努力的。

    这是我用的密码。它返回所有 <字符串> 文件的元素,而不仅仅是我在任何给定时刻使用的节点。

    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 回复  |  直到 5 年前
        1
  •  2
  •   zx485    5 年前

    它返回所有 <string> 文件的元素,而不仅仅是我在任何给定时刻使用的节点。

    对。这是正确的行为,因为 //string 全部返回 全球地 目前 string 元素。

    只返回所有 后代 一串 元素,只需添加 . 在xpath-1.0表达式的开头,如下所示:

    ...
    XmlNodeList qstrings = qquestion.SelectNodes(".//string");
    foreach (XmlNode qstring in qstrings)
    {
      question = qstring.InnerText; //There's a lot more processing I'll do here
    }
    ...
    

    表达式 .//string 返回所有 一串 当前子代的元素 qquestion XML节点。