Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/xpath/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
XPATH(eXistdb)如何替换literal&;nbsp;在HTTP请求内容中_Xpath_Xquery_Exist Db - Fatal编程技术网

XPATH(eXistdb)如何替换literal&;nbsp;在HTTP请求内容中

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 «

我们的用户将数据输入到浏览器表单中,包括可能包含不间断空格的文本。当他们将数据保存到服务器时(通过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 «&nbsp;littérature 
   d’anecdotes&nbsp;» (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('&lt;request 
type=&quot;edit_collection&quot; date=&quot;TC0002&quot;&gt;
&lt;about&gt;Chômei a donc rédigé un recueil d’anecdotes, s’intégrant 
dans le genre de la «&nbsp;littérature d’anecdotes&nbsp;» (setsuwa 
bungaku), qui remonte au début du IXe siècle.&lt;/about&gt; 
&lt;/request&gt;') to a node set 

XML Parsing Error: undefined entity