jindw / xmldom

A PURE JS W3C Standard based(XML DOM Level2 CORE) DOMParser and XMLSerializer.
Other
819 stars 265 forks source link

invalid attribute::model #267

Closed Falways closed 3 years ago

Falways commented 3 years ago

I use new DOMParser().parseFromString(htmlData,'text/html') , to parse html, such as:

<el-form :model="kefuForm"  :rules="rules" ref="kefuForm">
            <el-form-item  prop="username">
                <el-input v-model="kefuForm.username" placeholder="用户名"></el-input>
            </el-form-item>
            <el-form-item  prop="password">
                <el-input v-model="kefuForm.password" type="password" placeholder="密码"></el-input>
            </el-form-item>
            <el-form-item>
                <el-button style="width: 100%" :loading="loading" type="primary" @click="kefuLogin('kefuForm')">登录</el-button>
            </el-form-item>
        </el-form>

but I get error! [xmldom error] element parse error: Error: invalid attribute::model @#[line:62,col:9] [xmldom error] element parse error: Error: invalid attribute::loading @#[line:70,col:17]

Lhasa23 commented 3 years ago

Do you fix it?

Falways commented 3 years ago

Do you fix it? Annotated source code, solved my problem! update sax.js

ElementAttributes.prototype = {
setTagName:function(tagName){
if(!tagNamePattern.test(tagName)){
throw new Error('invalid tagName:'+tagName)
}
this.tagName = tagName
},
add:function(qName,value,offset){
/*if(!tagNamePattern.test(qName)){
throw new Error('invalid attribute:'+qName)
}*/
this[this.length++] = {qName:qName,value:value,offset:offset}
},
length:0,
getLocalName:function(i){return this[i].localName},
getLocator:function(i){return this[i].locator},
getQName:function(i){return this[i].qName},
getURI:function(i){return this[i].uri},
getValue:function(i){return this[i].value}
//  ,getIndex:function(uri, localName)){
//      if(localName){
//          
//      }else{
//          var qName = uri
//      }
//  },
//  getValue:function(){return this.getValue(this.getIndex.apply(this,arguments))},
//  getType:function(uri,localName){}
//  getType:function(i){},
}
karfau commented 3 years ago

Just in case you didn't notice, the repo is now forked and maintained over at https://github.com/xmldom/xmldom

But as far as I know those attributes with a leading colon are not valid XML. Of course I could be wrong, in which case there is a good chance to get it fixed in xmldom.

Lhasa23 commented 3 years ago

Just in case you didn't notice, the repo is now forked and maintained over at https://github.com/xmldom/xmldom

But as far as I know those attributes with a leading colon are not valid XML. Of course I could be wrong, in which case there is a good chance to get it fixed in xmldom.

I use it for parsing Vue HTML-template string. There will be some attributes with leading by colon or '@'. I view your repo and I notice you do the same thing for attribute name. Anyway I use origin DOMParse API back to parse my Vue string. Maybe you could set different condition for origin HTML/XML string or Vue HTML-template string. That's my narrow minded opinion.

karfau commented 3 years ago

@Lhasa23 Thanks for pointing it out. I checked the specs and you are right.

I filed this issue to address in xmldom at some point in the future: https://github.com/xmldom/xmldom/issues/252