1

linq-to-xml を使用してゼロから xml ドキュメントを構築しようとしています。

XElement root = new XElement("RootNode");
            XDocument doc = new XDocument(
            new XDeclaration("1.0", "utf-8", ""), root
            );
            for (int j = 0; j < 10; j++)
            {
                XElement element = new XElement("SetGrid");
                element.SetElementValue("ID", j);                    
                root.Add(element);

            }
   var reader = doc.CreateReader();//doc has 10 elements inside root element
   string result = reader.ReadInnerXml();//always empty string

から文字列を取得するにはどうすればよいXDocumentですか?

4

4 に答える 4

2

string result = doc.ToString()またはを使用するだけです

var wr = new StringWriter();
doc.Save(wr);
string result = wr.ToString();
于 2013-01-21T10:11:12.987 に答える
1

ドキュメントによる空の文字列の 1 つのオプション。

XmlReader戻る:

現在のノード内のマークアップを含むすべての XML コンテンツ。現在のノードに子がない場合は、空の文字列が返されます。現在のノードが要素でも属性でもない場合、空の文字列が返されます。

試す:

XmlReader reader = doc.CreateReader();
reader.Read(); 
string result = reader.ReadInnerXml()
于 2013-01-21T10:28:15.593 に答える
0

ここに完全な答えがあります

簡単に言えば、あなたが行方不明ですreader.MoveToContent();

つまり、次のようになります。

var reader = root.CreateReader();
reader.MoveToContent(); // <- the missing line
string result = reader.ReadInnerXml();

この方法ではresult空にならず、作成する必要さえありませんXDocument

したがって、元の質問 + 修正からの完全なコードは次のとおりです。

XElement root = new XElement("RootNode");
for (int j = 0; j < 10; j++)
{
    XElement element = new XElement("SetGrid");
    element.SetElementValue("ID", j);
    root.Add(element);
}

var reader = root.CreateReader();// root has 10 elements
reader.MoveToContent(); // <-- missing line
string result = reader.ReadOuterXml(); // now it returns non-empty string

出力:

<RootNode><SetGrid><ID>0</ID></SetGrid><SetGrid><ID>1</ID></SetGrid><SetGrid><ID>2</ID></SetGrid><SetGrid><ID>3</ID></SetGrid><SetGrid><ID>4</ID></SetGrid><SetGrid><ID>5</ID></SetGrid><SetGrid><ID>6</ID></SetGrid><SetGrid><ID>7</ID></SetGrid><SetGrid><ID>8</ID></SetGrid><SetGrid><ID>9</ID></SetGrid></RootNode>

注: コードは Visual Studio 2013 / .NET Framework 4.5 でテストされています

MDSN リファレンス: XmlReader.ReadOuterXml

于 2015-02-11T13:59:15.600 に答える
0
var wr = new StringWriter();
doc.Save(wr);
var xmlString = wr.GetStringBuilder().ToString());
于 2013-01-21T10:12:49.957 に答える