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

这工作得很好:

//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 回答
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 回答
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 回答
0

这里是:

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

返回Hello<child>Wold</child>并在 .NET 3.5 上工作

于 2013-03-07T20:47:44.327 回答