/// <summary> /// Reads an XML name or a prefix-name pair. /// </summary> /// <returns>True if a valid name was read, false otherwise.</returns> /// <param name="prefix">The namespace prefix, if any.</param> /// <param name="localName">The local name.</param> private bool _readName(out string?prefix, [NotNullWhen(true)] out string?localName) { prefix = null; localName = null; ReadOnlySpan <char> span = m_str.AsSpan(m_pos); int nameLength = XMLHelper.getValidNamePrefixLength(span); if (nameLength == 0) { return(false); } var nameSpan = span.Slice(0, nameLength); m_pos += nameLength; if (m_pos >= m_str.Length || m_str[m_pos] != ':') { localName = m_namePool.getPooledValue(nameSpan); return(true); } prefix = m_namePool.getPooledValue(nameSpan); m_pos++; span = m_str.AsSpan(m_pos); nameLength = XMLHelper.getValidNamePrefixLength(span); if (nameLength == 0) { return(false); } localName = m_namePool.getPooledValue(span.Slice(0, nameLength)); m_pos += nameLength; return(true); }