Обратите внимание, что все из эти stringstream
методы могут включать блокировку вокруг использования объекта языкового стандарта для форматирования. Это может быть чем-то, чтобы опасаться при использовании этого преобразования из нескольких потоков...
Посмотрите здесь для больше. Преобразовывают число в строку с указанной длиной в C++
Сводка Exec - вы хотите:
xml.Elements.Select(function(element) new XElement(element.Name,element.Attributes))
Первый ответ:
XElement.Descendants
, или это вопрос с подвохом? : P Здесь есть пример использования Descendants
Исправленный ответ, спасибо Tormod - что-то не так!:
Elements дает прямых потомков, как вы и ищете. Потомки дают полную иерархию [как вы утверждаете, что это делает Elements]. (Пример, на который я ссылался, проясняет это. Приношу извинения за путаницу!
Итак, наконец, то, что вы ищете (на этот раз в VB):
Dim xml = <Root>
<Parent id="1">
<Child>Thomas</Child>
</Parent>
<Parent id="2">
<Child>Tim</Child>
<Child>Jamie</Child>
</Parent>
</Root>
REM All nodes two levels down in the hierarchy
Dim level2Nodes = xml.Elements.SelectMany(function(element) element.Elements)
level2Nodes.Dump
REM All Child nodes, no matter where they are:
Dim children = xml.Descendants("Child")
Каждый из них даст вам 3 "" ` элементов по разным причинам, как описано в REM.
(Вставьте приведенное выше непосредственно в LINQPad в режиме оператора VB)
Теперь я понимаю, что вас может сбить с толку - когда вы используете Elements и смотрите на это в визуализаторе, вы все еще видите детей: -
Dim parents = xml.Elements
Если вам нужны только настоящие имена, вы можете использовать что-то вроде:
Dim parentNames = xml.Elements.Select(function(element) element.Name)
Обратите внимание, что в каждом из этих случаев вы получаете два результата.
Если вы действительно хотите избавиться от детей, вы хотите:
Dim parentElements = xml.Elements.Select(function(element) new XElement(element.Name,element.Attributes))
Можете ли вы расширить свой вопрос, чтобы показать, что вы действительно ищете?
XElement.Elements получает коллекцию дочерних элементов. Например ...
var s = @"<root>
<e1>
<e2>
</e2>
</e1>
<e1>
<e2>
</e2>
</e1>
<e1>
<e2>
</e2>
</e1>
</root>";
var doc = XElement.Load( new StringReader(s) );
Console.WriteLine( doc.Elements().Count() ); // 3
Console.WriteLine( doc.Descendants().Count()); //6
Почему бы не использовать XPath?
Dim myXML As var = New XmlDocument()
myXML.Load(myXML.xml)
For Each node As XmlNode In myXML.SelectNodes("//")
Dim myVar As var = node.SelectSingleNode("Parent").InnerText
Next
Возьмите это с долей скептицизма - я только что преобразовал его из C # в VB.
Если все прямые потомки имеют одно и то же известное имя элемента, и это имя элемента не может появиться на другом уровне, вы можете использовать xml.Descendants ("Parent").