XElement의 InnerXml을 가져오는 가장 좋은 방법은 무엇인가요?
아래 코드에서 혼합된 body
요소의 내용을 가져오는 가장 좋은 방법은 무엇인가요? 요소에는 XHTML 또는 텍스트가 포함될 수 있지만, 저는 그 내용을 문자열 형식으로만 원합니다. XmlElement유형에는 제가 원하는 것과 정확히 일치하는
InnerXml` 속성이 있습니다.
작성된 코드는 제가 원하는 것을 '거의' 수행하지만, 제가 원하지 않는 주변 <body>
...</body>
요소가 포함되어 있습니다.
XDocument doc = XDocument.Load(new StreamReader(s));
var templates = from t in doc.Descendants("template")
where t.Attribute("name").Value == templateName
select new
{
Subject = t.Element("subject").Value,
Body = t.Element("body").ToString()
};
144
15
이 중 어떤 것을 보고 싶다고 솔루션뀉뀉뀉뀉 수행됨 베스트중에, 그래서 일부 비교 테스트를 실행했음. 난 또 관심 아웃해야 LINQ 방식을 제안한 방법을 시스템.1믈 비교한 결과 plain old 그렉이야. 있는 것이 아니라 제가 걱정했던것 편차에 흥미로웠다 최저속 메서드을 3 배 이상 빠른 속도로 보다 느린 기술입니까 .
가장 빠른 결과를 위해 발주한 최저속:
내가 예전에는 하나의 XML 문서 (# 39, & # 39 라는 hint&;) 와 동일한 노드입니다 20:
무엇보다 초) 로 표시된 숫자를 " 추출 분석한 결과, 내부 xml". 20 명 중 노드입니다, 1000년 5 회 연속 평균 (짓궂군요) 등에 대한 런입니다. 내가 didn& 포함시키십시오 로드하고 분석할 데 걸리는 시간을 t # 39, XML 문서로 XmlDocument ' ( 시스템.1믈 대한 method)' 또는 '스도쿠망' (for all the others).
내가 더 링크 알고리즘을 사용하는 것이다. (C # - 모든 불러키지 ',' " 헤르망 parent". 반품해야 및 내부 XML 문자열)
39 위, t, 내가 haven& " Plain old System.Xml". # 39 에 대한 다음과 같은 알고리즘입니다 it& 그냥 콜린스믈 호출하십시오 노드입니다.
성능이 매우 중요한 경우 (예를 들어, XML, 자주 많은 구문 분석), d, s ',' 방법을 사용하여 I& # 39 Daniel& # 39 크레이트라이더 때마다 . # 39 you& 경우, re 할 일을 한 몇 쿼리합니다 Mike& 사용해야 할 수도 있습니다, s # 39 더 간결하게 전체 메서드입니다.
39, re (XML) 를 you& 경우 큰 요소가 많은 노드 (아마 100& # 39, s), 아마도 you& # 39; d '시작' 을 통해 전체 방법을 사용하여 효과를 볼 수 있지만, '크레이트라이더 스트라이베이더 거치지 않고'. 내가 생각하는 ',' t '와' Concat 참가하십시오 don& # 39 더 효율적으로 사용할 수 있는 방법을 판매업체에서 아니하였으매 이러한 조건 때문에 큰 대형 어레이입니다 변환하는 응벌을 목록 (비록 작지만 명백하네 열거합니다 여기).
내 생각에 이것은 훨씬 더 나은 방법 (# 39 에서 VB, shouldn& 변환하기에 어렵다, t):
지정된 헤르망 x:
이를 통해 어떻게 " extension"; 메서드를 헤르망? 협력했습니다 가져다줄래요!
조금 사용하거나 Linq
With all due 크레딧보다 가장 좋은 것을 발견하고, 이들을 위해 외곽진입 (감사합니다!), 이것은 랩된 up in 확장명으로 방법:
Keep it simple 및 효율적인:
결국 이걸 사용하게 되었습니다:
개인적으로 사용한 방법을 '전체' 확장명은 이너스마르 됐지 작성 방법:
그럼 내 클라이언트 코드가 없는 낡은 것과 마찬가지로 간결한 약간만이라도 시스템.1믈 이름공간이:
Greg: 답변을 완전히 다른 답변으로 수정하신 것 같습니다. 제 대답은 예, System.Xml을 사용하여이 작업을 수행 할 수 있지만 LINQ에서 XML로 발을 담그고 싶었습니다.
다른 사람이 필요한 것을 얻기 위해 XElement의 .Value 속성을 사용할 수없는 이유를 궁금해하는 경우를 대비하여 원래 답변을 아래에 남겨 두겠습니다:
그렉: Value 속성은 모든 자식 노드의 모든 텍스트 내용을 연결합니다. 따라서 본문 요소에 텍스트만 포함되어 있으면 작동하지만 XHTML이 포함되어 있으면 모든 텍스트가 함께 연결되지만 태그는 연결되지 않습니다.
regex // 단순히 트림합니다 시작하고 끝나는 요소점 태그를 사용하여 더 빠를 수도 있다.
도c토스트링 () 또는 doc. ToString (사브루티언스) 높여줍니까 작동합니까. 이아스파스 http://msdn.microsoft.com/en-us/library/system.xml.linq.xelement.tostring 지켜보리니 (v = vs. 110)
대해 작업을 할 수 있습니다
혹시 if (= 나는 attaboy 디이브이 없애야 할 바로 그 b+ b+)
비해 효율성이 약간 덜 수 있습니다
100% 쳐다본 것은 설레스버트 http://support. 집합체 () 와 구체화하십시오. I join () 에 다시 읽기 때문에 전체 정보기술 (it) 을 추가 세리스자리 생각하노라 그냥 본질적으로 값을 얻을 수 있습니다.
문자열을 string 구체화하십시오 = +
대對 구체화하십시오. 이 회사는 그 안에 있는 뭔가를 makes me 의 파스트 스트린갈로카션 언급하십시오 참가하십시오 일부 사람들이 Microsoft 에 몇 가지 추가 방황토록 지정값이 것 또는 성능 향상을 거기에. 물론 내 네스토라리 두고 있지만 그것이 싶어서 up call my () 는 다른 제안이다.
아시죠? 할 수 있는 최선의 일은 뒤로를 CDATA: (im 쳐다보는 솔루션뀉뀉뀉뀉 여기서요 하지만 내가 생각하는 CDATA 는 지금까지 가장 간단하고 가장 편리한 아니라 수천 개발할 수 있는 가장 저렴
여기서 LINQ를 사용하는 대신 System.Xml 네임스페이스 객체를 사용하여 작업을 수행할 수 있나요? 이미 언급했듯이 XmlNode.InnerXml이 바로 필요한 것입니다.