Brett Hyland Ответов: 1

Как получить имя верхнего уровня элемента xelement?


У меня есть xml-файл, который я создаю. Я пытаюсь скопировать/клонировать (как бы вы это ни называли) один элемент до конца. Вот краткий обзор:
<VDZ>
  <Transformer>
    <Tx>
      <Handle>1</Handle>
      <ID>TBA</ID>
      <Rating>200kVA</Rating>
      <Z>0.03444</Z>
      <Points>
        <P ID="0" X="120" Y="96" />
      </Points>
    </Tx>
  </Transformer>
</VDZ>


Я использую запрос LINQ, чтобы получить элемент, основанный на элементе Handle, например :

Dim query = (From p In xml_Proj.Descendants()
                            Where p.Element("Handle") = ActiveHandle
                            Select p).FirstOrDefault


Итак, у меня есть запрос, но как его клонировать/копировать? Мне нужно знать, что он пришел из трансформаторного элемента, и я хочу добавить еще один в конце. Я пробовал использовать нижеприведенное, но получаю ноль.
Dim root As XElement = query.Parent


Как я могу получить имя потомка и поместить под ним копию элемента? Спасибо.

Что я уже пробовал:

Я пробовал, как уже упоминалось выше

Maciej Los

Что именно вы хотите скопировать? Техас или трансформаторным узлом?
Пожалуйста, приведите пример вывода.

1 Ответов

Рейтинг:
2

Maciej Los

Не уверен, чего вы хотите добиться, но взгляните на приведенный ниже код:

Dim xcontent As String  = "<VDZ>
  <Transformer>
    <Tx>
      <Handle>1</Handle>
      <ID>TBA</ID>
      <Rating>200kVA</Rating>
      <Z>0.03444</Z>
      <Points>
        <P ID='0' X='120' Y='96' />
      </Points>
    </Tx>
  </Transformer>
</VDZ>"

Dim xdoc AS XDocument = XDocument.Parse(xcontent)
Dim secondTransformer As XElement = New XElement(xdoc.Descendants("Transformer").FirstOrDefault())
Dim h As XElement = secondTransformer.Descendants("Handle").FirstOrDefault()
h.Value = 2
xdoc.Root.Add(secondTransformer)
'new node hase been added!