我試圖讀取包含像下面提到的數據元素的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>
澄清編輯
問我能確定我的問題,這個問題以後,就是從一個WCF服務調用的上下文中執行從MessageBuffer
創建XPathNavigator
實例創建一個XmlReader
。因此@ 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
僅供參考,你不應該使用'新的XmlTextReader()'或'新的XmlTextWriter()'。自.NET 2.0以來,它們已被棄用。改爲使用'XmlReader.Create()'或'XmlWriter.Create()'。 –
不幸的是,這不是我所看到的行爲。更準確地說'reader.value'在從linqpad或MSTest中運行時起作用,但在WCF服務調用的上下文中運行時會截斷。 – Tedford
@Tedford也許問題是數據中的編碼或不可讀的符號?用錯誤舉個簡單的例子。 –