7

XElementオブジェクトに次のコンテンツがあるとしましょう

<root>Hello<child>Wold</child></root>

私が使用する場合XElement.ToString()、これは私に与えます

"<root xmnls="someschemauri">Hello<child>World</child></root>"

XElement.Valueを使用すると、次のようになります。

"Hello World"

私は取得する必要があります

"Hello <child>World</child>"

これを行うための適切な機能は何ですか(ある場合)?

4

6 に答える 6

4

.NET 4 のソリューション

var result = String.Join("", rootElement.Nodes()).Trim();

完全なコード (.NET 3.5 の場合):

XElement rootElement = XElement.Parse("<root>Hello<child>Wold</child></root>");
var nodes = rootElement.Nodes().Select(n => n.ToString()).ToArray();
string result = String.Join("", nodes).Trim();
Console.WriteLine(result);
// writes "Hello<child>World</child>"

すべてのノードに参加しない高速ソリューション:

XElement rootElement = XElement.Parse("<root>Hello<child>Wold</child></root>");
var reader = rootElement.CreateReader();
reader.MoveToContent();
string result = reader.ReadInnerXml(); 
于 2013-03-07T20:22:08.233 に答える
1

これは次のようになります。

var element = XElement.Parse("<root>Hello<child>Wold</child></root>");
string xml = string.Join("", element.Nodes().Select(e => e.ToString()));

.NET 3.5 の場合 (それが問題の場合):

var element = XElement.Parse("<root>Hello<child>Wold</child></root>");
string xml = string.Join("", element.Nodes().Select(e => e.ToString()).ToArray());
于 2013-03-07T20:33:43.503 に答える
1

最速の既知のソリューションに基づく拡張方法:

public static class XElementExtension
{
    public static string InnerXML(this XElement el) {
        var reader = el.CreateReader();
        reader.MoveToContent();
        return reader.ReadInnerXml();
    }
}

次に、単純に呼び出します。xml.InnerXML();

于 2015-12-18T20:32:51.973 に答える
1

これはかなりうまくいきました:

//SOLUTION BY Nenad
var element = XElement.Parse("<root>Hello<child>World</child></root>");
string xml = string.Join("", element.DescendantNodes().Select(e => e.ToString()));
Debug.WriteLine(xml);

最終出力:Hello<child>Wold</child>World


#3 を試す

XDocument xDoc = XDocument.Parse(@"<root>Hello<child>World</child></root>");
XElement rootElement = xDoc.Root;
Debug.WriteLine(rootElement.Value + rootElement.FirstNode.ToString());
于 2013-03-07T19:58:26.837 に答える
0

これをテストする時間はありませんが、試してください:

var inners = from n in xelementVariableName.Nodes()
                       select n;
return String.Join(String,Empty, inners);

テスト済み:

public static string ReturnInnerXml()
{
    var doc = XDocument.Parse(@"<root>Hello<child>World</child></root>");
    var root = doc.Root;
    if (root == null)
    {
        throw new InvalidOperationException("No root");
    }

    var inners = from n in root.Nodes()
                 select n;
    return String.Join(String.Empty, inners);
}

これにより、次が生成されます。

Hello<child>World</child>

.NET 4.0 を使用しています。

于 2013-03-07T20:09:21.247 に答える