XmlReader.ReadElementContentAsBinHex(Byte[], Int32, Int32) Method
Definition
Important
Some information relates to prerelease product that may be substantially modified before it’s released. Microsoft makes no warranties, express or implied, with respect to the information provided here.
Reads the element and decodes the BinHex
content.
public:
virtual int ReadElementContentAsBinHex(cli::array <System::Byte> ^ buffer, int index, int count);
public virtual int ReadElementContentAsBinHex (byte[] buffer, int index, int count);
abstract member ReadElementContentAsBinHex : byte[] * int * int -> int
override this.ReadElementContentAsBinHex : byte[] * int * int -> int
Public Overridable Function ReadElementContentAsBinHex (buffer As Byte(), index As Integer, count As Integer) As Integer
Parameters
- buffer
- Byte[]
The buffer into which to copy the resulting text. This value cannot be null
.
- index
- Int32
The offset into the buffer where to start copying the result.
- count
- Int32
The maximum number of bytes to copy into the buffer. The actual number of bytes copied is returned from this method.
Returns
The number of bytes written to the buffer.
Exceptions
The buffer
value is null
.
The current node is not an element node.
-or-
An XmlReader method was called before a previous asynchronous operation finished. In this case, InvalidOperationException is thrown with the message "An asynchronous operation is already in progress."
The index into the buffer or index + count is larger than the allocated buffer size.
The XmlReader implementation does not support this method.
The element contains mixed-content.
The content cannot be converted to the requested type.
Examples
The following example reads an inline BinHex
encoded image. The BinHex
data is embedded within the <image>
element. A BinaryWriter is used to create a new binary data file.
public static void BinHexDecodeImageFile() {
byte[] buffer = new byte[1000];
int readBytes = 0;
using (XmlReader reader = XmlReader.Create("output.xml")) {
FileStream outputFile = new FileStream(@"C:\artFiles\data\newImage.jpg", FileMode.OpenOrCreate,
FileAccess.Write, FileShare.Write);
// Read to the image element.
reader.ReadToFollowing("image");
// Read the BinHex data.
Console.WriteLine("\r\nReading BinHex...");
BinaryWriter bw = new BinaryWriter(outputFile);
while ((readBytes = reader.ReadElementContentAsBinHex(buffer, 0, 50))>0) {
bw.Write(buffer, 0, readBytes);
}
outputFile.Close();
}
}
Public Shared Sub BinHexDecodeImageFile()
Dim buffer(999) As Byte
Dim readBytes As Integer = 0
Using reader As XmlReader = XmlReader.Create("output.xml")
Dim outputFile As New FileStream("C:\artFiles\data\newImage.jpg", FileMode.OpenOrCreate, FileAccess.Write, FileShare.Write)
' Read to the image element.
reader.ReadToFollowing("image")
' Read the BinHex data.
Console.WriteLine(vbCr + vbLf + "Reading BinHex...")
Dim bw As New BinaryWriter(outputFile)
readBytes = reader.ReadElementContentAsBinHex(buffer, 0, 50)
While (readBytes > 0)
bw.Write(buffer, 0, readBytes)
readBytes = reader.ReadElementContentAsBinHex(buffer, 0, 50)
End While
outputFile.Close()
End Using
End Sub
Remarks
This method reads the element content, decodes it using BinHex
encoding, and returns the decoded binary bytes (for example, an inline BinHex
-encoded GIF image) into the buffer.
This method can only read simple-content elements. The element can contain text, white space, significant white space, CDATA sections, comments and processing instructions. It can also contain entity references, which are automatically expanded. The element cannot have child elements.
This method is very similar to the ReadContentAsBinHex method except that it can only be called on element node types.
If the count
value is higher than the number of bytes in the document, or if it is equal to the number of bytes in the document, the XmlReader reads all the remaining bytes in the document and returns the number of bytes read. The next XmlReader method call returns a zero and moves the reader to the node following the EndElement
.
If you call Read before all of the element content is consumed, the reader may behave as if the first content was consumed and then the Read method was called. This means that the reader will read all the text until the end element is encountered. It will then read the end tag node, read the next node, and then position itself on the next subsequent node.
For the asynchronous version of this method, see ReadElementContentAsBinHexAsync.