2017-08-30 2 views
-1

私はXDocumentを構築しており、出力をテストするための単体テストがあります。私がテストしたいことの1つは、無効な文字列がXML用に適切にフォーマットされていることです。 XDoc自体の.ToString()を呼び出すと、XMLの無効な文字列が正しくフォーマットされることがわかりました。しかし、私のテストでは、特定の要素または属性をXDocから取り出して値をテストしています。これはXMLの値をフォーマットしません。これらの値をエスケープ形式で取得するにはどうすればよいですか?XMLエスケープ形式でXDocumentの要素値を取得するにはどうすればよいですか?

回答:(THXエド・プランケット)

myXDoc.Descendants("element2").First().FirstNode.ToString(); 
// result "Pork&Beans" 

サンプル:

var xml = 
"<element1>" + 
    "<element2>Pork&Beans</element2>" + 
"</element1>"; 

var myXDoc = XDocument.Load(xml); 

var xDocString = myXDoc.ToString(); 
// result is formatted - <element1> <element2>Pork&amp;Beans</element2> </element1> 

var element2Value = myXDoc.Decendents("element2").First().Value; 
// result is unformatted - Pork&Beans 
+0

だから、明確にするために、あなたがフォーマットされていない形式のXML文字列全体をしたいですか? – Sach

+0

'myXDoc.Descendants(" element2 ")。First()。ToString()'。ところで、あなたのサンプルコードはコンパイルする前に少しの作業が必要です。 –

+0

要素のToString()を呼び出すと、 " Pork & Beans"が理想的ではありません。私は "ポーク&豆"を得ることを望んでいます。 – Sevren

答えて

1

がそれを手に入れた:XMLのテキスト要素があまりにノードです。

var el2XML = myXDoc.Descendants("element2").First(); 
var porkAndAmpSemicolonBeans = el2XML.FirstNode.ToString(); 

あなたはまた、正確に一つの子がそこにありますことを確認するel2XML.Nodes.Countをチェックしたいと思います。


System.Xml.XmlDocumentXmlNodeが何をしたいあなたを与えるだろうInnerXml性質を持っているので、別のオプションです:

var morePorkAndBeans = doc.SelectSingleNode("//element2").InnerXml; 
関連する問題