나는 XML을 읽고 분석을하는 새로운 프로젝트를 보도록 요청 받았다. 나는 C#을 조금 안다. 지금까지이 코드를 사용하여이 코드를 작성했습니다. 나는 4 개의 노드리스트를 성공적으로 얻는다. 나는 몇 가지 문제가있다. 먼저 목록 중 하나의 노드에있는 태그에 액세스하는 방법을 모르겠습니다. 둘째, LINQ 쿼리를 사용할 수 있지만 XmlNodeList는 해당 구문을 지원하지 않는 것 같습니다. 아래의 샘플 XML에서 io_group_name 또는 mdisk_grp_name 속성에 의해 결정된 특정 IO 그룹 또는 mdisk에 속한 모든 가상 디스크를 가져올 수 있기를 바랍니다. 내가 보았던 대부분은 [Attribute] 목록에 액세스하는 예제를 제공하고 사용 된 모든 속성/atttributes를 검색했습니다.독서 <property> 태그
내가 시도한 것은 또한 아래에있다, 그것은 null 값 예외를 줬다. 속성 목록에는 하나의 속성 만 있습니다. 내가 원하는 것을하기위한 예제를 찾을 수 없으며 디버거의 노드를 검사하여 내가 원하는 것을 수행하기 위해 액세스해야하는 것이 명확하지 않다.
//this works
XmlTextReader reader = new XmlTextReader(_InputFile);
XmlDocument doc = new XmlDocument();
doc.Load(reader);
XmlNodeList clusterlist = doc.SelectNodes("//object[@type='cluster']");
XmlNodeList controllerlist = doc.SelectNodes("//object[@type='controller']");
XmlNodeList mdisklist = doc.SelectNodes("//object[@type='mdisk']");
XmlNodeList vdisklist = doc.SelectNodes("//object[@type='vdisk']");
// this did not work - got null value exception
foreach (XmlNode vdisknode in vdisklist)
{
string str = vdisknode.Attributes["mdisk_grp_name"].Value;
}
는 XML의 샘플 :
<object type="vdisk">
<property name="id" value="0" />
<property name="name" value="nim01_vd06_gmt" />
<property name="IO_group_id" value="0" />
<property name="IO_group_name" value="ossvc06_iogrp0" />
<property name="status" value="online" />
<property name="mdisk_grp_id" value="0" />
<property name="mdisk_grp_name" value="T1_OSIBM06_MDG1" />
<property name="capacity" value="644245094400" />
<property name="type" value="striped" />
</object>
vdisknode.Atttributes [] 하나의 항목이 있습니다. 이름의 문자열 값이 "유형"이고 값의 문자열 값이 "vdisk"입니다. 당신의 대답은 도움이되었습니다. 나는 내가 원하는 것을 vdisknode에서 찾았습니다. 자식 노드 –
@DavidGreen :'vdisknode.Atttributes []'에는 하나의 항목이 있으며'type'입니까, 맞습니까? 그래서 네, 정말로 하위 노드의 ('property') 이름과 값이 필요합니다. – abatishchev
@abatischev는 LINQ를 도와 주셔서 감사합니다. Stackoverflow 당 XDocument에 대해 작동하는 또 다른 버전을 생각해 냈지만, 당신은 다른 것을 위해 작동 할 것입니다. –