Linq to XML запрос создания пустых элементов из XML - PullRequest
1 голос
/ 15 февраля 2010

Может кто-нибудь объяснить, почему это XML

<?xml version="1.0" encoding="utf-8"?>
<items>
  <item id="77" cityID="EE12345" cityDatum="15.2.2010. 11:28:35" />
</items>

при использовании запроса

Dim c = From items In st.Descendants _
             Where items.@id IsNot Nothing _
        Select New myStorage With {.id = items.@id, .cityID = items.@cityID, .cityDatum = items.@cityDatum}

storage = c.ToList

в результате получается список (из myStorage) с двумя элементами - один со всеми пустыми (ничего) свойствами, второй со значениями, указанными в xml выше?

Я решил проблему, добавив

Where items.@id IsNot Nothing _

до Seletct New myStorage, но у меня есть чувство, что я не должен этого делать.

Я воссоздал это в C #, storage.xml точно такой же, как указано выше.

    private void Form1_Load(object sender, EventArgs e)
    {

    XDocument st;
    st = XDocument.Load("C:\\storage.xml");
   Object c = from items in st.Descendants()
                    select new {id = items.Attribute("id"), cityID = items.Attribute("cityID"), cityDatum = items.Attribute("cityDatum")};
    }

Если вы, как некоторые не можете воспроизвести эти результаты, вот скриншот:

снимок экрана http://www.incito.hr/15.2.2010.png

1 Ответ

0 голосов
/ 16 февраля 2010

Получено из обновленного примера кода. Когда вы говорите

st = XDocument.Load("C:\\storage.xml");

, а затем

st.Descendants()

ваш st - это документ , а не корневой элемент . Поэтому, когда вы запрашиваете его Descendants, вы перечисляете по 2 XElement s - узлу items и одному узлу item, который есть в этом примере. Это узел items, который дает вам «пустой» элемент.

Существует множество способов ограничить себя только узлами item, в зависимости от того, насколько вы уверены в структуре вашего xml - например,

From item In st.Root.Elements("item") 

будет перечислять по только узлам item, найденным как непосредственные дочерние элементы корневого элемента документа.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...