2016-09-26 26 views
0

例えば、私はこのXML文字列を持っている:XmlDocumentからノードのInnerTextとInnerXmlを取得するには?

<?xml version="1.0" encoding="utf-8"?> 
<data> 
    <text>How to get <bold>all</bold> this string's content?</text> 
</data> 

私はその構造を失うことなく、(各オブジェクトのために、私はクラスを持っている)オブジェクトの配列ではこれらすべての要素を取得したい:

[1] (TextClass; where bold = false) How to get 
[2] (TextClass; where bold = true) all 
[3] (TextClass; where bold = false) this string's content? 

私はXmlDocumentXmlNodeクラスを使用しています。今はInnerTextクラスまたはInnerXmlクラスです。

XmlDocument xmlDoc = new XmlDocument(); 
xmlDoc.Load("example.xml"); 
foreach (XmlNode child in xmlDoc.DocumentElement.ChildNodes) 
{ 
    string chName = child.Name; // text 
    string text = child.InnerText; // How to get all this string's content? 
    string xml = child.InnerXml; // How to get <bold>all</bold>this string's content? 
} 

可能ですか?

+0

あなたは実際にここで何を求めていますか?あなたは子供がいる。あなたは何が欠けていますか? 'ChildNodes'を繰り返して、それに応じて独自のクラスインスタンスを作成してください。それらを 'List 'などに追加してください。または、LINQを使用します。 –

+0

@EdPlunkett私が成し遂げようとしているのは、テキストのシーケンスを取得したいということです。このテキストでは、このテキストが定型化されていることを示すXmlNodeがあります。スローの子ノードを反復することで、このシーケンスを失うことになります。なぜなら、テキストと定型文をそれぞれ別々に取得するからです。 –

+0

どのようなテキストのシーケンスですか?あなたが持っているものに何が問題なのですか? 'ChildNodes'で順番が違う子ノードのシーケンスの例を教えてください。 「お互いに別々に」という意味はどういう意味ですか? –

答えて

1

このような作業では、LINQ to XMLを使用する方が簡単だと思います。あなたの例では

次のようなものは、(あなたが達成したい正確に何に応じて)仕事ができる:

XDocument doc = XDocument.Parse(xml); 
var textClasses = from n in doc.Descendants("text").DescendantNodes() 
        where n.NodeType == XmlNodeType.Text 
        select new { text = ((XText)n).Value, bold = n.Parent?.Name == "bold" }; 

そして.net fiddleので、あなたはすぐに結果を見ることができます。

関連する問題