구문 분석하려고하는 레거시 데이터베이스에 xml 문자열이 저장되어 있습니다. 문자열을 얻을 수 있지만 필요한 값을 얻는 데 2 가지 문제가 있습니다. 먼저, 일부 샘플 xml.하위 XML 요소에 어떻게 액세스합니까?
<?xml version="1.0" encoding="utf-16"?>
<email>
<meta>
<smartForm>
<unit name="ForgotUsername" label="Forgot Username Email">
<textBox name="FromEmail" label="From Email" type="Email" />
<textBox name="FromName" label="From Name" type="100" />
<textBox name="BccEmail" label="BCC" type="EmailList" />
<textBox name="Subject" label="Subject" type="300" />
<textBox2 name="TextBody" label="Body" type="Memo" />
</unit>
<unit name="ForgotPassword" label="Forgot Password Email">
<textBox name="FromEmail" label="From Email" type="Email" />
<textBox name="FromName" label="From Name" type="100" />
<textBox name="BccEmail" label="BCC" type="EmailList" />
<textBox name="Subject" label="Subject" type="300" />
<textBox2 name="TextBody" label="Body" type="Memo" />
</unit>
</smartForm>
</meta>
<value><?xml version="1.0" encoding="utf-16"?><root><ForgotPassword BccEmail="[email protected]" FromEmail="[email protected]" FromName="password test" Subject="password test" TextBody="info" /><ForgotUsername BccEmail="[email protected]" FromEmail="[email protected]" FromName="test" Subject="test" TextBody="test" /></root></value>
</email>
문제 # 1 - 나는 XML 선언 (즉, 처음 39 자)를 제거하지 않는 한 나는 <value>
노드를 얻을 수 없다, 그러나 XElement.Parse("string")
를 사용하여 XML을 구문 분석을 시도했다. 나는 그것이 취성있는 해결책이기 때문에 이것을하지 않기를 바라고있다.
문제 # 2 - 나는 <value>
요소의 내용을 가지고 있고 XElement를로 분석하면, 나는 <root>
문서 요소의 <ForgotUsername>
또는 <ForgotPassword>
자식 노드 중 하나에 쿼리를합니다. .Elements()
을 받았을 때 컬렉션이 null이라고 들었습니다.
내가 뭘 잘못하고 있니?
실체를 교체 한 후 가치의 XML :
<root>
<ForgotPassword BccEmail="[email protected]" FromEmail="[email protected]" FromName="password test" Subject="password test" TextBody="info" />
<ForgotUsername BccEmail="[email protected]" FromEmail="[email protected]" FromName="test" Subject="test" TextBody="test" />
</root>
UPDATES : - :
var xdoc = XDocument.Parse(contentXml);
return (from element in xdoc.Elements("value")
select element.Value).FirstOrDefault();
abatishchev의 초기 제안을 시도 후 나는 다음에 문제 # 1의 코드를 변경
제공된 정보를 기반으로 값 노드의 문자열을 반환해야합니다. 그러나 null을 반환합니다. xdoc.Elements() (또는 위의 스 니펫에 표시된대로)는 null을 반환합니다.
당신이'XDocument.Parse()'대신'XElement.Parse()'의 시도? – dahlbyk
두 가지 모두에서 동일한 결과를 얻으려고했습니다. – JamesEggers