LINQ를 배우기 시작했고 XML 문서에서 특정 ID를 검색해야합니다. 그 ID를 찾으면 그 옆에있는 요소의 문자열 값을 읽어야합니다. 동일한 레벨 (첨부 된 XML의 구조 참조).Linq to XML - ID로 XMLdocument 검색 및 그 옆에있는 요소 읽기
XElement 및 LINQ to XML을 사용하여이 코드를 이미 만들었지 만 가장 효율적인 방법이 아니며 개선 방법에 대한 의견을 듣고 싶습니다.
예. 내가 FIELD_ID (84)이있을 때 나는 "필드 이름 두 번째"를 반환 할
LINQ 쿼리 :
XNamespace ns = "http://myapp.com/";
XElement xe = XElement.Load(filePathToLoad);
var xeQueryXmlOneOnly = from xItem in xe.Descendants(ns + "Item")
where xItem.Element(ns + "Field_ID").Value.Equals("84")
select new
{
fieldName = xItem.Elements(ns + "Field_Name").FirstOrDefault().Value,
fieldID = xItem.Elements(ns + "Field_ID").FirstOrDefault().Value
};
var resultsFound = xeQueryXmlOneOnly.FirstOrDefault();
단순화 된 XML 문서 :
<?xml version="1.0" encoding="utf-8"?>
<exns:recordCollection xmlns:exns="http://myapp.com/" xmlns:ns1="urn:my-scripts" xmlns:ns2="urn:schemas-microsoft-com:xslt" xmlns:ns3="urn:XsltUtils">
<exns:record>
<exns:Application_Name>My App</exns:Application_Name>
<exns:Field_Information>
<exns:Item>
<exns:Field_ID>1184</exns:Field_ID>
<exns:Field_Name>Field name 1</exns:Field_Name>
</exns:Item>
<exns:Item>
<exns:Field_ID>84</exns:Field_ID>
<exns:Field_Name>Field Name second</exns:Field_Name>
</exns:Item>
<exns:Item>
<exns:Field_ID>8426</exns:Field_ID>
<exns:Field_Name>Field name last</exns:Field_Name>
</exns:Item>
</exns:Field_Information>
</exns:record>
</exns:recordCollection>
실제로는 XML 문서는 훨씬 더 길 것 엄청난 수의 ID를 쿼리하는 거대한 루프에서 질의를받을 것입니다 - 그럼 여기에 관련된 질문이 있습니다 - 한꺼번에 모든 것을 얻을 수있는 방법이 있습니까 (SQL WHERE ID IN (.....)와 비슷한)?
고유 한 ID입니까? 그리고 XML은 항상 형식이 잘되어 있습니까? –