【发布时间】:2017-12-29 14:45:59
【问题描述】:
我正在做的是在 XML 文档中查找特定值,然后我想向上遍历每个父级,直到找到具有特定标记名称的父级。
List<XElement> fieldReferences = new List<XElement>();
fieldReferences.AddRange(element.XPathSelectElements(string.Format("descendant::nameValue[@idref='{0}']", fieldName)));
fieldReferences.AddRange(element.XPathSelectElements(string.Format("descendant::nameValue[@value='{0}']", fieldName)));
string parentIterator = ".Parent";
string attributeValue = ".Attribute('id').Value";
string parentElementName = ".Name";
foreach (var value in fieldReferences)
{
var parentField = string.Format("{0}{1}", parentIterator, parentElementName);
while (value + parentField != "private" || value + parentField != "public")
{
// keep appending .Parent until it finds what it needs
}
//var parentField = value.Parent.Parent.Parent.Parent.Attribute("id").Value;
outputFields.Add(parentField, name.FirstOrDefault());
}
我遇到的问题是 parentField 将始终被评估为字符串,因此它永远不会真正检查 .Parent.Name 属性的值。
我不经常使用 C#,所以我确信有一种更简单的方法可以做到这一点,所以我的问题是:如何让我的 parentField 字符串评估我想要的方式,或者我如何在不同的方式来达到相同的最终结果?
编辑:这是我的 xml 的样子。 XPAthSelectElement 获取 nameValue 元素,我想遍历每个父元素,直到找到私有标记
<private id="I need to iterate upwards through each parent element until I find this one">
<value>
<request>
<nameValues>
<nameValue idref="I found this" />
<nameValue value=""/>
</nameValues>
</request>
</value>
</private>
【问题讨论】:
-
我已经阅读了您的问题几次,但在弄清楚您要做什么时仍然遇到一些问题。你能举一些XML的真实例子,以及你想匹配的东西的类型吗?
-
XElement 有一个父属性,它会为您提供另一个 XElement,那么为什么需要转换为字符串呢? msdn.microsoft.com/en-us/library/…。 value.Parent 为您提供父级,然后从那里获取有关父级的信息。
-
是的,抱歉有点难以解释。
-
这是我的 XML