【发布时间】:2023-03-26 17:14:02
【问题描述】:
我正在使用 XPath 从 XML 文档中读取元素。具体来说,我想返回作为指定元素的子元素的任何元素的值(这里指定元素是 <SceneryType> 并且这些元素具有个位数的值。所以我想返回 <SceneryType> 1 的所有子元素例子。
这是 XML:
<MissionObjectives>
<Theme themeName="Gothic">
<SceneryType>
1
<Objective>
Do a river thing.
</Objective>
<Objective>
Get all men to the other side of the river.
</Objective>
</SceneryType>
<SceneryType>
2
<Objective>
Climb some trees!
</Objective>
<Objective>
Shoot the tree!
</Objective>
</SceneryType>
</Theme>
我尝试了各种方法来获取这些子元素,但我无法弄清楚。我的表达式的 //objective 部分只是从它看起来的根返回所有内容,但是迭代器没有运行,这看起来很奇怪,如果表达式返回所有元素的节点列表,它不应该遍历每个元素吗?
XPathDocument missionDoc = new XPathDocument(objectivesPath + "MissionObjectives" + chosenTheme + ".xml");
XPathNavigator nav = missionDoc.CreateNavigator();
foreach (Scenery scenery in world.currentWorld)
{
int sceneryType = scenery.type;
XPathExpression expr = nav.Compile($"MissionObjectives/Theme/SceneryType[text()='{sceneryType}']//Objective");
XPathNodeIterator iterator = nav.Select(expr);
while (iterator.MoveNext())
{
XPathNavigator nav2 = iterator.Current.Clone();
compatibleObjectivesList.Add(nav2.Value);
}
}
我曾尝试在 Stack Overflow 中查找类似问题,但似乎找不到任何适用于 XPath 的内容。我不能为此使用 LINQ to XML。知道如何返回各种“目标”节点的所有值吗?
为任何帮助干杯!
【问题讨论】: