XElement - 如何将元素的后代放入字符串中
XElement - how do I get descendants of an element into a string
我正在 .Net 3.5 Framework
中使用 XElement 对象加载以下 xml 片段。
示例XML:
<xmlfragment>
<list id="1" value="one" />
<list id="2" value="two" />
<other stuff="here" />
<more things="as well"></more>
</xmlfragment>
如何将 xml 片段的后代转化为字符串?换句话说,将除 xml 片段标记之外的所有内容都放在一个字符串中。
以下有效,但想知道这是否是最简洁的方法。
string results = String.Join(" ", xmlfragment.DescendantNodes().Select(x=>x.ToString()).ToArray());
对于 .Net 3.5,只需执行
var result = string.Join(" ", xElement.Elements().Select(x => x.ToString()).ToArray());
因此,即使存在多级层次结构,也不会失败。
您可以使用substring
来剪切第一行和最后一行。
string originalString = xdoc.ToString();
int startIndex = originalString.IndexOf(Environment.NewLine) + Environment.NewLine.Length;
var stringWithoutParent = originalString.Substring(startIndex,
originalString.LastIndexOf(Environment.NewLine) - startIndex);
如果您希望元素 space 分隔(而不是行和缩进),那么还要添加:
.Replace(" ", "")
.Replace(Environment.NewLine," ");
如果您没有操纵 xml,并且如您所显示的那样分隔行,则根本不需要使用 XElement
。
当您使用 .NET 3.5 时,没有特别简单的方法来简化它 - 尽管如果您发现自己经常需要它,您总是可以编写自己的静态方法来模拟 [=11 的新重载=].您可以在 Select
调用中使用方法组转换而不是 lambda 表达式,但是如果您 也 使用旧的 C# 编译器,这很可能会导致问题太多。 (关于类型推断和方法组转换的确切规则随着时间的推移而改变。)
但是,当存在嵌套元素时,当前代码将失败。看起来您只需要直接子节点:
string results = string.Join(" ", xmlFragment.Nodes().Select(x => x.ToString()).ToArray());
我正在 .Net 3.5 Framework
中使用 XElement 对象加载以下 xml 片段。
示例XML:
<xmlfragment>
<list id="1" value="one" />
<list id="2" value="two" />
<other stuff="here" />
<more things="as well"></more>
</xmlfragment>
如何将 xml 片段的后代转化为字符串?换句话说,将除 xml 片段标记之外的所有内容都放在一个字符串中。
以下有效,但想知道这是否是最简洁的方法。
string results = String.Join(" ", xmlfragment.DescendantNodes().Select(x=>x.ToString()).ToArray());
对于 .Net 3.5,只需执行
var result = string.Join(" ", xElement.Elements().Select(x => x.ToString()).ToArray());
因此,即使存在多级层次结构,也不会失败。
您可以使用substring
来剪切第一行和最后一行。
string originalString = xdoc.ToString();
int startIndex = originalString.IndexOf(Environment.NewLine) + Environment.NewLine.Length;
var stringWithoutParent = originalString.Substring(startIndex,
originalString.LastIndexOf(Environment.NewLine) - startIndex);
如果您希望元素 space 分隔(而不是行和缩进),那么还要添加:
.Replace(" ", "")
.Replace(Environment.NewLine," ");
如果您没有操纵 xml,并且如您所显示的那样分隔行,则根本不需要使用 XElement
。
当您使用 .NET 3.5 时,没有特别简单的方法来简化它 - 尽管如果您发现自己经常需要它,您总是可以编写自己的静态方法来模拟 [=11 的新重载=].您可以在 Select
调用中使用方法组转换而不是 lambda 表达式,但是如果您 也 使用旧的 C# 编译器,这很可能会导致问题太多。 (关于类型推断和方法组转换的确切规则随着时间的推移而改变。)
但是,当存在嵌套元素时,当前代码将失败。看起来您只需要直接子节点:
string results = string.Join(" ", xmlFragment.Nodes().Select(x => x.ToString()).ToArray());