![]() |
1
196
我想看看这些建议的解决方案中哪一个性能最好,所以我做了一些比较测试。出于兴趣,我还将Linq方法与普通的旧方法进行了比较 命名空间 格雷格建议的方法。变化很有趣,不是我所期望的,最慢的方法是 比最快的慢3倍以上 . 按最快到最慢排序的结果:
方法 我使用了一个包含20个相同节点的XML文档(称为“提示”):
上面显示的秒数是提取20个节点的“内部XML”的结果,连续1000次,取5次运行的平均值(平均值)。我没有包括将XML加载和解析到
我使用的LINQ算法是:
(C-全部采用
CreateReader:
字符串串联聚合:
StringBuilder:
字符串。在数组上联接:
数组上的string.concat:
我没有在这里显示“plain old system.xml”算法,因为它只是在节点上调用.innerxml。 结论
如果性能很重要(例如大量XML,经常解析),我会
使用丹尼尔
如果在具有大量节点(可能100个)的大型元素上使用XML,您可能会开始看到使用XML的好处
|
![]() |
2
66
我认为这是一个更好的方法(在VB中,应该不难翻译): 给定Xelement X:
|
![]() |
3
17
在Xelement上使用这个“扩展”方法怎么样?为我工作!
或者用点LINQ
注释
:以上代码必须使用
|
![]() |
4
12
感谢那些发现并证明了最佳方法的人(谢谢!),这里它被包装在一个扩展方法中:
|
![]() |
5
9
保持简单高效:
|
![]() |
6
7
最后我用了这个:
|
![]() |
7
3
就我个人而言,我最后写了一篇
然后,我的客户机代码和旧System.xml命名空间一样简洁:
|
![]() |
8
2
@格雷格:看来你把答案编辑成了一个完全不同的答案。我的答案是肯定的,我可以使用system.xml来实现这一点,但我希望用linq-to-xml让我的脚湿透。 如果有人想知道为什么我不能使用Xelement的.Value属性来获取我需要的内容,我将在下面留下我的原始答复: @greg:value属性连接任何子节点的所有文本内容。因此,如果body元素只包含文本,那么它是可以工作的,但是如果它包含XHTML,那么我可以将所有文本连接在一起,但不包含任何标记。 |
![]() |
9
1
//使用regex可能更快,只需修剪begin和end元素标记
|
![]() |
10
1
doc.toString()或doc.toString(saveoptions)可以完成这项工作。 见 http://msdn.microsoft.com/en-us/library/system.xml.linq.xelement.tostring(v=vs.110).aspx |
![]() |
11
0
是否可以使用System.xml命名空间对象在此处完成作业,而不是使用Linq?正如您已经提到的,xmlnode.innerxml正是您所需要的。 |
![]() |
12
0
想知道是否(注意我去掉了b+=并且只得到了b+)
可能效率比
不是100%确定的…但是浏览一下反射层中的aggregate()和string.join()…i 认为 我把它读作聚合,只是附加一个返回值,所以本质上你可以得到: 字符串=字符串+字符串 与string.join相比,这里提到了fastStringAllocation或其他一些东西,这让我觉得微软的人可能已经在其中增加了一些额外的性能提升。当然,我的.toarray()调用我的negate that,但我只是想提供另一个建议。 |
![]() |
13
0
你知道的?最好的做法是回到CDATA:(我在这里研究解决方案,但我认为,迄今为止,CDATA是最简单、最便宜的,不是最方便使用tho开发的。 |
![]() |
14
0
会帮你做的 |
![]() |
15
-2
|
![]() |
Ehsan Akbar · 在c中获取xelement的数据# 7 年前 |
![]() |
bill · 如何从c中的xml字符串获取特定值# 9 年前 |
![]() |
user3774466 · 对象的XMLDescendants 10 年前 |
|
bzchk · 当节点为空时,如何不打印该节点 10 年前 |