在复杂的JSON数组和哈希中搜索项目时,例如:
[
{ "id": 1, "name": "One", "objects": [
{ "id": 1, "name": "Response 1", "objects": [
// etc.
}]
}
]
Run Code Online (Sandbox Code Playgroud)
我可以用某种查询语言来查找项目in [0].objects where id = 3
吗?
我跟踪存储在Roles
SQL Server数据库中的XML列(称为)中的XML .
<root>
<role>Alpha</role>
<role>Beta</role>
<role>Gamma</role>
</root>
Run Code Online (Sandbox Code Playgroud)
我想列出在其中具有特定角色的所有行.此角色由参数传递.
鉴于此XML:
<DocText>
<WithQuads>
<Page pageNumber="3">
<Word>
July
<Quad>
<P1 X="84" Y="711.25" />
<P2 X="102.062" Y="711.25" />
<P3 X="102.062" Y="723.658" />
<P4 X="84.0" Y="723.658" />
</Quad>
</Word>
<Word>
</Word>
<Word>
30,
<Quad>
<P1 X="104.812" Y="711.25" />
<P2 X="118.562" Y="711.25" />
<P3 X="118.562" Y="723.658" />
<P4 X="104.812" Y="723.658" />
</Quad>
</Word>
</Page>
</WithQuads>
Run Code Online (Sandbox Code Playgroud)
我想找到具有'July'文本和Quad/P1/X属性大于90的节点.因此,在这种情况下,它不应该返回任何匹配.但是,如果我使用GT(>)或LT(<),我会在第一个Word元素上得到匹配.如果我使用eq(=),我得不到匹配.
所以:
//Word[text()='July' and //P1[@X < 90]]
Run Code Online (Sandbox Code Playgroud)
将会返回true
//Word[text()='July' and //P1[@X > 90]]
Run Code Online (Sandbox Code Playgroud)
如何在P1 @ X属性上正确约束?
另外,想象一下,我有多个Page元素,用于不同的页码.我如何另外约束上面的搜索以找到节点text()='July', P1@X < 90
和Page @pageNumber=3
?
有什么区别XPath
,XQuery
和XPointer
?据我所知,XQuery
是一个扩展版本XPath
.我有一些基本的知识XPath
.是否有任何功能提供XPath
这不XQuery
?昨天,我听到一个新词,XPointer
.我很迷惑.哪种语言用于哪种目的?
如何在不选择子节点中的文本的情况下检索节点中的文本?
<div id="comment">
<div class="title">Editor's Description</div>
<div class="changed">Last updated: </div>
<br class="clear">
Lorem ipsum dolor sit amet.
</div>
Run Code Online (Sandbox Code Playgroud)
换句话说,我想要Lorem ipsum dolor sit amet.
而不是Editor's DescriptionLast updated: Lorem ipsum dolor sit amet.
我有一个看起来像这样的XML
<element1>
<element2>
<element3>
<element4>Hello</element4>
<element5>World</element5>
</element3>
<element3>
<element4>Hello2</element4>
<element5>World2</element5>
</element3>
<element3>
<element4>Hello3</element4>
<element5>World3</element5>
</element3>
</element2>
</element1>
Run Code Online (Sandbox Code Playgroud)
我试图使用Xpath得到这样的结果:
Hello.World
Hello2.World2
Hello3.World3
Run Code Online (Sandbox Code Playgroud)
我在下面使用了concat函数但是没有得到正确的结果.
Concat功能:
concat(/element1/element2/element3/element4/text(),".", /element1/element2/element3/element5/text())
Run Code Online (Sandbox Code Playgroud)
结果我得到了:
Hello.World
Run Code Online (Sandbox Code Playgroud)
我怎样才能得到正确的结果?我正在使用XPath与Camel Spring DSL.
编辑:
XQuery,XSLT和SPel中的解决方案也很受欢迎.
编辑
我尝试了字符串连接,但它不起作用:
字符串连接函数:
string-join((/element1/element2/element3/element4/text(), /element1/element2/element3/element5/text()),".")
Run Code Online (Sandbox Code Playgroud)
结果我得到了:
Hello.Hello2.Hello3.World.World2.World3
Run Code Online (Sandbox Code Playgroud) 我在表的列中有类似下面的XML:
<?xml version="1.0" encoding="utf-8"?>
<container>
<param name="paramA" value="valueA" />
<param name="paramB" value="valueB" />
...
</container>
Run Code Online (Sandbox Code Playgroud)
我试图通过TSQL从XML中获取valueB部分
到目前为止,我正在获得正确的节点,但现在我无法弄清楚如何获取属性.
select xmlCol.query('/container/param[@name="paramB"]') from LogTable
Run Code Online (Sandbox Code Playgroud)
我想我可以添加/ @值到最后,但是SQL告诉我属性必须是节点的一部分.我可以找到许多用于选择子节点属性的示例,但兄弟属性中没有任何属性(如果这是正确的术语).
任何帮助,将不胜感激.
我想将SELECT
语句的结果输出为JSON对象.
我希望这是一个函数而不是存储过程!
例如,下表用户
id name active
1 Bob Jones 1
2 John Smith 0
Run Code Online (Sandbox Code Playgroud)
会像这样返回:
[{"id":1,"name":"Bob Jones","active":1},{"id":2,"name":"John Smith","active":0}]
Run Code Online (Sandbox Code Playgroud)
提前致谢.
我有一个存储为文本的类型化的xml文档.因此,我使用公用表表达式将数据类型CONVERT转换为xml,以便能够使用XML方法:
WITH xoutput AS (
SELECT CONVERT(xml, t.requestpayload) 'requestpayload'
FROM TABLE t
WHERE t.methodid = 1)
SELECT x.requestpayload.query('declare namespace s="http://blah.ca/api";/s:validate-student-request/s:student-id') as studentid
FROM xoutput x
Run Code Online (Sandbox Code Playgroud)
查询工作,返回给我元素.但我只对价值感兴趣:
WITH xoutput AS (
SELECT CONVERT(xml, t.requestpayload) 'requestpayload'
FROM TABLE t
WHERE t.methodid = 1)
SELECT x.requestpayload.value('declare namespace s="http://blah.ca/api";/s:validate-student-request/s:student-id', 'int') as studentid
FROM xoutput x
Run Code Online (Sandbox Code Playgroud)
这给了我以下错误:
'value()'需要一个单例(或空序列),找到'xdt:untypedAtomic*'类型的操作数
我用google搜索说XPATH/XQUERY需要在括号内和/或需要"[1]" - 两者都没有用.xml中只有一个student-id元素,但我想模式允许更多?
另外,我想要检索的元素值很多 - 有没有办法声明命名空间一次而不是每个方法调用?
我有一个表,T1,在SQL Server 2008上有一个XML列,EventXML.我想查询某些节点包含特定值的所有行.更好,我想在不同的节点中检索值.表T1:
T1:
EventID, int
EventTime, datetime
EventXML, XML
Run Code Online (Sandbox Code Playgroud)
这是一个示例XML层次结构:
<Event>
<Indicator>
<Name>GDP</Name>
</Indicator>
<Announcement>
<Value>2.0</Value>
<Date>2012-01-01</Date>
</Announcement>
</Event>
Run Code Online (Sandbox Code Playgroud)
xquery ×10
xml ×7
xpath ×6
sql ×3
sql-server ×3
t-sql ×3
json ×2
javascript ×1
spring-el ×1
xslt ×1