当XML看起来正常时,为什么jquery的parseXML函数失败?

mat*_*rns 1 javascript xml debugging jquery parsing

我有一个非常简单的javascript尝试解析我从jpeg中的元数据中提取的xml:

var xmlDoc;
try {
    xmlDoc = $.parseXML(xmlString);
} catch(e) {
    console.log(e);
}
Run Code Online (Sandbox Code Playgroud)

以下是抛出的异常:

Invalid XML: <x:xmpmeta xmlns:x="adobe:ns:meta/" x:xmptk="XMP Core 4.4.0">
   <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
      <rdf:Description rdf:about=""
            xmlns:photoshop="http://ns.adobe.com/photoshop/1.0/">
         <photoshop:Instructions>C1DDZVs9Sr+DG5R9eSc%9w</photoshop:Instructions>
      </rdf:Description>
      <rdf:Description rdf:about=""
            xmlns:aux="http://ns.adobe.com/exif/1.0/aux/">
         <aux:SerialNumber>1</aux:SerialNumber>
         <aux:Lens>AF-S DX VR Zoom-Nikkor 18-200mm f/3.5-5.6G IF-ED [II]</aux:Lens>
         <aux:LensID>1</aux:LensID>
         <aux:ImageNumber>6651</aux:ImageNumber>
         <aux:FlashCompensation>0/1</aux:FlashCompensation>
      </rdf:Description>
   </rdf:RDF>
</x:xmpmeta>
Run Code Online (Sandbox Code Playgroud)

这个XML似乎没有任何问题.事实上,如果我直接剪切并粘贴该xml,则不会抛出任何异常:

var xmlDoc;
try {
    xmlDoc = $.parseXML('<x:xmpmeta xmlns:x="adobe:ns:meta/" x:xmptk="XMP Core 4.4.0">       <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">          <rdf:Description rdf:about=""                xmlns:photoshop="http://ns.adobe.com/photoshop/1.0/">             <photoshop:Instructions>C1DDZVs9Sr+DG5R9eSc%9w</photoshop:Instructions>          </rdf:Description>          <rdf:Description rdf:about=""                xmlns:aux="http://ns.adobe.com/exif/1.0/aux/">             <aux:SerialNumber>1</aux:SerialNumber>             <aux:Lens>AF-S DX VR Zoom-Nikkor 18-200mm f/3.5-5.6G IF-ED [II]</aux:Lens>             <aux:LensID>1</aux:LensID>             <aux:ImageNumber>6651</aux:ImageNumber>             <aux:FlashCompensation>0/1</aux:FlashCompensation>          </rdf:Description>       </rdf:RDF>    </x:xmpmeta>' );
} catch(e) {
    console.log("error parsing xml: " + e);
}
Run Code Online (Sandbox Code Playgroud)

我只能假设某个地方必定存在某种不可打印的特殊字符,这会造成麻烦.我如何测试该假设并修复它,或者其他可能是错误的?

mat*_*rns 5

我发现了这个问题.正如我所怀疑的那样,在弦乐的末尾潜伏着一些令人讨厌的不可打印的角色.

我能用这个肮脏的黑客删除它:

xmlString = xmlString.substr(xmlString.indexOf("<"), xmlString.lastIndexOf(">") + 1);
Run Code Online (Sandbox Code Playgroud)

如果它不明显,它只是修剪字符串的开头和结尾的任何内容,而不是xml文档的预期尖括号.jQuery函数"trim()"在删除流氓角色方面无效,因为它只有空白.

我不知道这个角色是什么,我对我的解决方案并不是特别满意,但我太忙了,不能花更多的时间在上面.叹.