コード例 #1
0
        /// <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);
        }