XPATH(eXistdb)如何替换literal&;nbsp;在HTTP请求内容中
我们的用户将数据输入到浏览器表单中,包括可能包含不间断空格的文本。当他们将数据保存到服务器时(通过AJAX请求eXist db),服务器会在HTTP POST有效负载内容中发送以下内容,并使用XPATH(eXistdb)如何替换literal&;nbsp;在HTTP请求内容中,xpath,xquery,exist-db,Xpath,Xquery,Exist Db,我们的用户将数据输入到浏览器表单中,包括可能包含不间断空格的文本。当他们将数据保存到服务器时(通过AJAX请求eXist db),服务器会在HTTP POST有效负载内容中发送以下内容,并使用: <request type="edit_collection" id="TC0002"> <about>Chômei a donc rédigé un recueil d’anecdotes, s’intégrant dans le genre de la «
:
<request type="edit_collection" id="TC0002">
<about>Chômei a donc rédigé un recueil d’anecdotes,
s’intégrant dans le genre de la « littérature
d’anecdotes » (setsuwa bungaku), qui remonte
au début du IXe siècle.</about>
</request>
但是,在解析之前简单地替换
是不合法的,即XPATH(在XQuery中,如eXist中所实现的那样?)将不接受此公式中的
:
let$content:=replace(请求:get-data(),“”,“ ;”
在解析为XML之前,是否有其他方法替换
(我倾向于在服务器端而不是在Javascript中进行清理)您显示的代码片段不是合法的XML-要形成良好的格式,它需要有一个DTD来声明实体
nbsp
。所以我们不清楚你是如何处理它的,也不清楚它为什么会走这么远
如果有DTD,那么XQuery处理器看到的内容(由XML解析器提供)将是实体的扩展(可能是单个xA0字符),查询不必做任何工作来理解或翻译它
也许这里还发生了其他事情:也许您显示的代码片段实际上在CDATA节中,所以XML解析器会原封不动地传递它
==更新==
您已经解释过,您实际上正在处理一个包含六个字符序列的字符串
,并且希望将其替换为单个字符xA0
抽象地说,XPath表达式replace('''.'''.'
(其中'.'是xA0)将实现这一点;问题是如何用具体的语法表达,这取决于宿主语言。这也是XQuery与XPath不完全相同的地方。特别是,XQuery使用XML规则对字符串文本中的特殊字符进行转义(但在其他地方没有),而XPath不进行任何转义或取消转义,而是依赖于宿主语言来完成
在XQuery中,我认为正确的表达式是replace('&;nbsp;', ;')
但这里还有另一个问题:为什么浏览器在其HTTP POST请求中发送格式错误的XML?格式良好的XML不包含未定义的实体引用,如
。与其尝试修复收件人中的XML,不如看看为什么会从发件人那里得到损坏的XML?首先,您是如何处理POST请求正文的?POST请求主体具有哪种内容类型?我在Michael Kay的响应下面添加了一些信息……浏览器中的Javascript为HTTP POST内容创建XML,并将其作为字符串发送。当XQuery模块使用函数request:get-data()
访问HTTP内容时,它还没有应用“数据类型”,它只是将该内容分配给$content
。只有当我将$content
发送到要解析为XML时,才会出现错误,指出xs:string无法转换为节点集
。只有当内容中出现
时,才会发生此错误。因此,我希望尽可能简单地用 ;虽然它仍然以xs:string格式有效。我已经在我的问题中添加了更多的细节,希望它能够响应您的陈述“因此不清楚您是如何处理它的,或者为什么它会如此。”事实上,我将修改Javascript以不发送未定义的实体引用。同时,我会愚蠢地认为,这是一个相当简单的问题,可以有效地替换字符串中的文本。但经过不同的测试,将任何replace()
应用于请求:get-data()
可以有效地去除传递给下一个函数的XML(即xs:string不再包含
,
等)很明显,我遗漏了一些东西,我需要做更多的研究。我想您可能对这是未解析的XML(字符串)还是已解析的XML(节点树)感到困惑。如果replace()正在丢失XML结构,则表明它是一个节点树;但是如果它是一个节点树,那么它不能包含未解析的实体引用。
exerr:ERROR cannot convert xs:string('<request
type="edit_collection" date="TC0002">
<about>Chômei a donc rédigé un recueil d’anecdotes, s’intégrant
dans le genre de la « littérature d’anecdotes » (setsuwa
bungaku), qui remonte au début du IXe siècle.</about>
</request>') to a node set
XML Parsing Error: undefined entity