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());
}
私がいる問題は、それが実際に価値の.Parent.Nameプロパティをチェックすることは決してないだろうので、parentFieldは常に文字列として評価されるということです。
私は頻繁にC#で動作しませんので、これを行う簡単な方法があります。私の質問は次のとおりです。parentField文字列を取得して、どのようにして評価するか、同じ最終結果を達成する別の方法?
EDIT:私の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を与える親プロパティがあります。なぜ文字列に変換する必要がありますか? https://msdn.microsoft.com/en-us/library/system.xml.linq.xelement_properties(v=vs.110).aspx。 value.Parentは親を与え、そこから親の情報を取得します。 – Ctznkane525
さて、申し訳ありませんが説明するのは少し難しいです。 – JOO