假设我在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>"
执行此操作的正确功能是什么(如果有)?
答案 0 :(得分: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();
答案 1 :(得分: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());
答案 2 :(得分: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());
答案 3 :(得分:1)
扩展方法基于最快的已知解决方案:
public static class XElementExtension
{
public static string InnerXML(this XElement el) {
var reader = el.CreateReader();
reader.MoveToContent();
return reader.ReadInnerXml();
}
}
然后简单地称之为:xml.InnerXML();
答案 4 :(得分: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。
答案 5 :(得分: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