元素类型后必须跟有属性规范“>”或“/>”

Element type must be followed by either attribute specifications, ">", or "/>"

我正在开发与 Netsuite XML API 的集成,我偶尔会遇到错误

Element type \"msmith\" must be followed by either attribute specifications, \">\" or \"/>\" 当请求中包含电子邮件地址时(例如 msmith@gmail.com)。

我认为这是因为 @ 符号需要编码,因为我对 & 符号也有类似的问题并且不得不将它们编码为 &,但据我所知根据我的搜索,@ 符号不是 XML 中的特殊字符。有没有一种方法可以对电子邮件地址进行编码或格式化,以便它们被 Netsuite 接受?

该错误消息并不是在抱怨 @;它在抱怨 <.

(在 XML 中,< 必须转义为 &lt;,除非它是元素标记的开始。)

您可能超过了 <msmith@gmail.com>,而您本应超过 msmith@gmail.com

另见 Simplified XML Escaping

几乎所有您尝试包含在 xml 文档中的自由值都应该被转义。

如果您使用的是 freemarker,它通常会根据字段类型和输出格式为您执行此操作。

如果您自己构建 xml,您可以从值中创建一个文本节点,该值将转义任何保留字符 document.createTextNode('some text with reserved chars') 或者,如果您要连接字符串,Netsuite 具有此功能:

SS1

'<div>'+ nlapiEscapeXML('some text with reserved chars') +'</div>'

SS2 使用 N/xml

'<div>'+ xml.escape({xmlText:'some text with reserved chars'}) +'</div>'