为了账号安全,请及时绑定邮箱和手机立即绑定

C# 中的嵌套 Xml 节点列表

C# 中的嵌套 Xml 节点列表

C#
慕田峪7331174 2023-08-27 10:47:09
我试图隔离下面 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


查看完整回答
反对 回复 2023-08-27
  • 1 回答
  • 0 关注
  • 142 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信