Я пытаюсь прочитать XML-документ, содержащий элементы, подобные приведенным ниже.Как прочитать текстовый элемент узла XML без разыменования объектов с помощью XmlReader
Доступ к текстовому узлу с помощью reader.Value
, reader.ReadContentAsString()
, reader.ReadContentAsObject()
приводит к считанному значению усекаются до последнего амперсанда, так что в случае данных ниже, что будет ISO^урна: IHE: ITI: XDS: 2013: направление , Используя XmlDocument
, текстовые узлы могут быть прочитаны правильно, поэтому я предполагаю, что должен быть способ сделать эту работу также с помощью читателя.
<Slot name="urn:ihe:iti:xds:2013:referenceIdList">
<ValueList>
<Value>123456^^^&orgID&ISO^urn:ihe:iti:xds:2013:referral</Value>
<Value>098765^^^&orgID&ISO^urn:ihe:iti:xds:2013:referral</Value>
</ValueList>
</Slot>
Разъяснение Редактировать
Задав вопрос, я был в состоянии определить мой вопрос пришел от создания XmlReader
из XPathNavigator
экземпляра, созданного из MessageBuffer
, выполняющихся в контексте вызова службы WCF , Таким образом, ответ @ DarkGray был правильным для исходного вопроса, но на самом деле не затрагивал корень проблемы. Я представил второй ответ, который касался моего дела в углу.
System.ServiceModel.Channels.Message message; // the inbound SOAP message
var buffer = message.CreateBufferedCopy(11 * 1024 * 1024);
var navigator = buffer.CreateNavigator();
var reader = navigator.ReadSubtree();
// advance the reader to the text element
//
// `reader.Value` now produces ISO^urn:ihe:iti:xds:2013:referral
FYI, вы не должны использовать 'новый XmlTextReader()' или 'новый XmlTextWriter()'. Они устарели с .NET 2.0. Вместо этого используйте 'XmlReader.Create()' или 'XmlWriter.Create()'. –
К сожалению, это не то поведение, которое я вижу. Точнее, 'reader.value' работает при запуске из linqpad или MSTest, но он обрезается при запуске в контексте вызова службы WCF. – Tedford
@Tedford Возможно, проблема заключается в кодировании или нечитаемых символах в данных? Сделайте простой пример с ошибкой. –