당신이 정말로 알 필요는 없지만, 문제 해결에 도움이 될 비트를 사용하여 중첩 된 XML 속성 값을 얻기 나는 것을, LINQPad에서 C#을 일련의 문장을 쓰고 있다는 것입니다 ELMAH (오류 로깅 시스템) 데이터베이스에서 레코드 컬렉션을 가져 와서 각 레코드에서 XML (AllXml) 필드를 추출하고 각 추출을 XmlDocument에로드합니다. 그래, 꽤 쉬워 보이지만 지금은 각 문서를 훑어보고 특정 값을 얻어야한다.
는 XML 구조의 예
참고 : 나는
<error type="System.Exception" time="2013-06-11T17:27:28.0122874Z">
<item name="PATH_INFO">
<value string="/foo/bar/thisIsTheValueIWant.aspx" />
</item>
<item name="PATH_TRANSLATED">
<value string="C:\site\foo\bar\thisIsPotentiallyAnotherValueIMightWant.aspx" />
</item>
<item name="QUERY_STRING">
<value string="meh" />
</item>
</error>
이 XML 문자열로 존재하는 것을 고려 ... 어떤 잠재적으로 기밀 정보를 여기에서 제거했다, 그래서 같이이로드 한 :
XmlDocument doc = new XmlDocument();
doc.LoadXml(xmlString);
문제점
노드의 값을 얻는 것은 그리 어렵지 않지만이 경우 노드의 속성으로 값이 저장되며 그 값을 통과하는 방법을 알지 못합니다!
나는 기본적으로 name
, "PATH_INFO"
으로 item
노드에 중첩 된 value
노드를 취득하고 "string"
속성의 값을 얻을 필요가있다.
어떻게하면됩니까?
내가 물어 봐도 될까요? 그것은 2008 년 XDocument와 XElement에 의해 대체되었습니다. –
@JoeAlbahari, 나는 XDocument와 XElement에 의해 2008 년에 대체되었다는 사실을 모르고 있었기 때문에 XmlDocument를 사용하고 있습니다. :-) ... 저는 이제 이것을 알고 있습니다. 아마도 약간의 연구와 리팩토링을위한 시간 일 것입니다! – series0ne
XDocument의 많은 장점 중 하나는 XPath를 배울 필요가 없다는 것입니다. 다른 종류의 컬렉션을 쿼리하는 것과 같은 방법으로 LINQ를 쿼리합니다. 문자열 결과 = (문자열) XElement.Parse (xmlString) .Elements ("항목") 단일 (i => (문자열) i.Attribute ("이름") == "PATH_INFO") .Element ("value"). 특성 ("string") –