JQuery XML和CDATA

时间:2018-03-29 09:01:33

标签: javascript jquery xml cdata

使用JQuery 来解析XML字符串,因为我需要来浏览DOM 然后并获取更改的内容。我认为JQuery是完成此任务的最佳工具。

rawXML字符串:

<Root>
  <Text Title='my "best" text'><![CDATA[ Yes & No ]]></Text>
</Root>

以下是我获取对象的方式:

let xml = $($.parseXML(rawXML)).find('Root');

因此,使用html()函数获取内容存在一些问题:

1)它删除了*

中包含文字的所有CDATA

2)它将attr值的单引号替换为double

此代码

console.log($($.parseXML('<Root><Text Title=\'my "best" text\'><![CDATA[ Yes & No ]]></Text></Root>')).find('Root').html());

返回<Text Title="my &quot;best&quot; text"></Text>

*我可以将<![CDATA[替换为<Cdata>来解决此问题,但由于&而发生错误。

可能是由xml-&gt; html trasforming引起的问题更多。

我如何保留所有XML&#34;按原样#34;并浏览DOM?

我更喜欢使用JQuery,因为我的代码的结果是用户的API,他们想要使用它=)

P.S。这是VSCode扩展(Node.js)

感谢您提供任何解决方案!

UPD

主要问题是我需要来自字符串的原始XML (它是有效的)及其所有引号,CDATA等。

1 个答案:

答案 0 :(得分:0)

  

主要问题是我需要从字符串中获取原始XML   (它是有效的)及其所有引号,CDATA等。

XPath并不处理词汇XML,它在解析后用于XML的树表示。树表示消除了保持不相关的区别,例如属性的顺序,单引号或双引号的选择,以及是否要转义特殊字符的决定,例如&#34;&amp;&#34;使用实体引用或CDATA部分。这是一个刻意的政策,因为它认为应用程序不应该关心这些差异。所以你可能运气不好。

但是如果你解释为什么你(认为你)需要访问原始的词汇XML,那么我们可能会找到一种不同的方式来满足这个要求。