XElement.Value не читает многострочные данные - PullRequest
0 голосов
/ 21 июля 2010

У меня есть следующий фрагмент XML, который я анализирую, чтобы прочитать его значения и отобразить их на веб-странице:

<root>
  <PostcardTitle>The Needles</PostcardTitle>
  <PostcardDescr>Granite Dells, Prescott</PostcardDescr>
  <PostcardImage>
    <img alt="GraniteDells" src="GraniteDells.jpg" />
  </PostcardImage>
  <PostcardDate />
  <PostcardCredit>Photo Courtesy of Joe Schmoe</PostcardCredit>
</root>

Я делаю это с помощью следующего кода (чтение фрагмента избаза данных):

Dim ContentDoc As XDocument
Dim DocPoints As IEnumerable(Of XElement)

ContentDoc = XDocument.Parse(ContentData.Item(0).content)
DocPoints = ContentDoc.<root>.Elements()

   For Each Item As XElement In DocPoints

   Dim TempLabel As New Label
   TempLabel.Text = Item.Name.LocalName & ": " & Item.Value

   Dim TempLiteral As New Literal
   TempLiteral.Text = "<br/><br/>"

   pnlEditItems.Controls.Add(TempLabel)
   pnlEditItems.Controls.Add(TempLiteral)

Next

При выполнении сценария все узлы успешно анализируются и отображаются, включая пустой узел PostcardDate, за исключением узла PostcardImage.При отладке вычисление Item.Value возвращает пустую строку.Однако оценка Item.ToString () возвращает теги PostcardItem и значение в нем.

Необходимо ли что-то сделать, чтобы объект XElement считывал многострочные значения, или я что-то упустил?

1 Ответ

2 голосов
/ 21 июля 2010

Вам не хватает того, что задокументировано для возврата XElement.Value:

Строка, содержащая все текстовое содержимое этого элемента.Если текстовых узлов несколько, они будут объединены.

Ваш PostcardImage документ не содержит никакого текстового содержимого (кроме пробелов).Вы должны выяснить, какие биты вы хотите (например, атрибут alt тега img) и использовать это.В качестве альтернативы, если вы просто хотите внедрить дословно XML, вы можете просто вызвать Nodes() для элемента ... Я не думаю, есть какой-либо эквивалент свойства "InnerXml" DOM.

...