@@ -134,19 +134,23 @@ static PrefixMapping getDefaultPrefixMapping() {
134134 }
135135
136136 public static PrefixAwareName parseName (SpecificationNode node , String qName ) {
137- String [] parsed = qName .split (":" );
138- String prefix = null ;
139- String localName = null ;
140- URI namespaceURI = null ;
137+ String prefix = "" ;
138+ String localName = qName ;
139+ URI namespaceURI = node .getQName ().getNamespaceURI ();
141140 PrefixMapping mapping = null ;
142- if (parsed .length == 2 ) {
143- prefix = parsed [0 ];
144- localName = parsed [1 ];
145- if (prefix .isEmpty ()) {
146- // :attrName のようにプレフィックス部分が空の時は":"も属性名に含める。
147- // 本来のXML仕様としては許容されないがHTML仕様としては名前空間自体をサポートしていないため属性名として有効なものとした。
148- localName = ":" + localName ;
149- }
141+
142+ int firstColonIndex = qName .indexOf (':' );
143+ if (firstColonIndex == -1 ) {
144+ // コロンが存在しない場合はプレフィックスを空文字列にする。
145+ } else if (firstColonIndex == 0 ) {
146+ // コロンが先頭の文字の場合はプレフィックスを空文字列にする。コロンも含めてlocalNameとする。
147+ // 本来のXML仕様としては許容されないがHTML仕様としては名前空間自体をサポートしていないため属性名として有効なものとした。
148+ } else if (firstColonIndex == qName .length () - 1 ) {
149+ // コロンが末尾にある場合はプレフィックスを空文字列にする。コロンも含めてlocalNameとする。
150+ } else {
151+ prefix = qName .substring (0 , firstColonIndex );
152+ localName = qName .substring (firstColonIndex + 1 );
153+
150154 mapping = node .getMappingFromPrefix (prefix , true );
151155 if (mapping == null ) {
152156 if ("xml" .equals (prefix )) {
@@ -159,24 +163,11 @@ public static PrefixAwareName parseName(SpecificationNode node, String qName) {
159163 }
160164 }
161165 namespaceURI = mapping .getNamespaceURI ();
162- } else if (parsed .length == 1 ) {
163- localName = parsed [0 ];
164- namespaceURI = node .getQName ().getNamespaceURI ();
165-
166- if (namespaceURI == null ) {
167- mapping = node .getMappingFromPrefix ("" , true );
168- if (mapping == null ) {
169- mapping = getDefaultPrefixMapping ();
170- }
171- namespaceURI = mapping .getNamespaceURI ();
172- }
173- } else {
174- throw new IllegalNameException (qName );
175166 }
176- if ( mapping != null ) {
177- prefix = mapping . getPrefix ();
178- } else {
179- prefix = "" ;
167+
168+ if ( namespaceURI == null ) {
169+ mapping = getDefaultPrefixMapping ();
170+ namespaceURI = mapping . getNamespaceURI () ;
180171 }
181172 PrefixAwareName ret = SpecificationUtil .createPrefixAwareName (
182173 SpecificationUtil .createQName (namespaceURI , localName ),
0 commit comments