首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >c#中的FLWOR XQuery是否返回空?

c#中的FLWOR XQuery是否返回空?
EN

Stack Overflow用户
提问于 2017-02-26 23:40:35
回答 1查看 245关注 0票数 1

我尝试在C#中使用Xquery FLOWR where语句:

代码语言:javascript
复制
for $x in //div[@class="class1"] where $x//span="data1" return $x  

从xml文件中获取一些数据。(使用FLOWR的原因是为了方便地从外部文件读取查询运行时)

为此,我使用了Saxon API:http://www.saxonica.com/html/documentation/dotnet/dotnetapi.html

xml代码如下所示:

代码语言:javascript
复制
<?xml version="1.0" encoding="UTF-8"?>
<doc>
    <div class="class1">
	<div class="class2">
		<span class="class3">
			data1
		</span>
		<span class="class4">
			data2
		</span>
	</div>
	<div class="class5">
		data3
	</div>
	<div class="class6">
		data4
	</div>
    </div>
    <div class="class1">
	<div class="class2">
		<span class="class3">
			data5
		</span>
	</div>
	<div class="class5">
		data6
	</div>
    </div>
</doc>

如果我使用X-base测试这段代码,它会像我预期的那样工作,并返回两个class1类中的一个;但是,Saxon和xpathtester.com都编译XQuery时没有出现错误,但返回为空。如果我删除了可选的where语句,它就会按预期运行。我是不是遗漏了什么?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-02-27 01:18:30

造成这种情况的原因是BaseX的CHOP option,它修剪文本节点末尾的所有空格。在启用CHOP (默认设置)的情况下导入到BaseX中时,您的文档看起来如下所示:

代码语言:javascript
复制
<doc>
  <div class="class1">
    <div class="class2">
      <span class="class3">data1</span>
      <span class="class4">data2</span>
    </div>
    <div class="class5">data3</div>
    <div class="class6">data4</div>
  </div>
  <div class="class1">
    <div class="class2">
      <span class="class3">data5</span>
    </div>
    <div class="class5">data6</div>
  </div>
</doc>

因为=操作符对字符串是空格敏感的,所以where子句匹配被截断文档的文本内容,而不是原始文档的文本内容。

您可以裁剪查询中的空格,这在所有情况下都有效:

代码语言:javascript
复制
for $x in //div[@class = "class1"]
where $x//span/normalize-space() = "data1"
return $x
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42470544

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档