javascript - 为什么 jquery 的 parseXML 函数在 XML 看起来正常时失败了?

标签 javascript jquery xml debugging parsing

我有一些非常简单的 javascript,它试图解析我从 jpeg 中的元数据中提取的 xml:

var xmlDoc;
try {
    xmlDoc = $.parseXML(xmlString);
} catch(e) {
    console.log(e);
}

这是抛出的异常:

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>

该 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);
}

我只能假设那里一定有某种不可打印的特殊字符导致了问题。我怎样才能测试这个假设并修正它,或者可能是其他地方出了问题?

最佳答案

我发现了问题。正如我所怀疑的那样,字符串末尾潜伏着一些令人讨厌的无法打印的字符。

我能够通过这种肮脏的黑客攻击将其删除:

xmlString = xmlString.substr(xmlString.indexOf("<"), xmlString.lastIndexOf(">") + 1);

如果不是很明显,它只是从字符串的开头和结尾删除任何不是 xml 文档预期的尖括号的内容。 jQuery 函数“trim()”在删除流氓字符方面无效,因为它只删除空格。

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

关于javascript - 为什么 jquery 的 parseXML 函数在 XML 看起来正常时失败了?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9315230/

相关文章:

javascript - 在应用程序重新启动之前,不会显示对文件的修改(文件 API)

jquery - 添加图像作为 jquery 数据表中的行值

c# - 反序列化 XML 文件

使用 Aeris Weather SDK 的 java.lang.ClassNotFoundException : com. hamweather.aeris.maps.R$layout

javascript - 选择 div 的 href 并提交表单?

javascript - 如何将元素添加到现有的CSS类

javascript - 从 DOM 中选择不是所选 e 的同级元素

Android 从右到左 NavigationDrawer 菜单项不是 RTL

javascript - 未捕获类型错误 : Cannot read property 'left' of null in js

javascript - 我想使用 jquery 在标签之间附加 anchor 文本