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 문자열을 사용하여 원하는 방식을 평가하려면 어떻게해야합니까? 또는 어떻게해야합니까? 같은 결과를 얻는 다른 방법?
편집 : 내 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