标签: xquery

在Marklogic数据库中存储名称/值对的最有效方法是什么

我的应用程序经常需要使用查找来修饰它所服务的文档中的值,以获取各种代码的可读形式.

例如<product_code>PC001</product_code>,希望被返回为<product_code code='PC001'>Widgets</product_code>.它并不总是product_code; 有一些不同类型的代码需要类似的行为(其中一些只有几十个例子,其中一些只有几千个.)

我想知道的是在数据库中存储数据的最有效方法是什么?我可以想到两种可能性:

1)每个代码类型一个文档,包含许多元素:

<product-codes>
  <product-code code = "PC001">Widgets</product-code>
  <product-code code = "PC002">Wodgets</product-code>
  <product-code code = "PC003">Wudgets</product-code>
</product-codes>
Run Code Online (Sandbox Code Playgroud)

2)每个代码一个文档,每个文档包含一个<product-code>如上所述的元素.

(显然,两种选择都包括合理的指数)

这些中的任何一个明显比另一个快吗?还有另一种更好的选择吗?

我的感觉是,每个文档保留一个"东西"通常会更好,因为它在概念上稍微清晰一些(我理解)更适合ML的索引,但在这种情况下,它似乎会导致非常大量的非常小的文件.那是我应该担心的吗?

xml xquery marklogic

10
推荐指数
2
解决办法
361
查看次数

XQuery(或XPath)是否具有Update,Insert和Delete以及Select的等价物?

我知道如何使用XPath从XML中找到我需要的东西.语法需要一点时间习惯,但它非常强大.我也有兴趣学习XQuery,但SQL语法似乎很尴尬.即便如此,如果它不仅可以提供选择的等价物,而且还可以像SQL那样提供更新,插入和删除,我将原谅所有的尴尬.

那么,XQuery是否具有Update,Insert和Delete以及Select的等价物?

XPath是否具有我忽略的这些等价物?

xml xslt xpath xquery

9
推荐指数
3
解决办法
4044
查看次数

Xquery从属性中获取值

我有一些xml,需要使用sql提取值

<?xml version="1.0" ?>  
<fields>  

<field name="fld_AccomAttic">  
<value>0</value>  
</field>  
<field name="fld_AccomBathroom">  
<value>1</value>  
</field>
</fields>  

</xml>
Run Code Online (Sandbox Code Playgroud)

我需要获取列名fld_AccomAttic
Value 1

xml保存在sql server 2005 db中

我之前使用过xquery并且它已经运行了.

如何提取这些值?

xml sql xquery

9
推荐指数
2
解决办法
2万
查看次数

我可以在Marklogic Server中的xquery中声明一个全局变量吗?

我想要一个全局变量,我可以在不同的.xqy页面中使用它.我可以在Marklogic Server中的xquery中声明这样的变量吗?

xquery marklogic

9
推荐指数
2
解决办法
5549
查看次数

使用SQL Server 2008表中的新值更新Xml属性

我在SQL Server 2008中有一个表,它有一些列.其中一列是Xml格式,我想更新一些属性.

例如,我的Xml列的名称是,XmlText并且它在5个第一行中的值如下:

 <Identification Name="John"  Family="Brown"     Age="30" /> 
 <Identification Name="Smith" Family="Johnson"   Age="35" /> 
 <Identification Name="Jessy" Family="Albert"    Age="60" />
 <Identification Name="Mike"  Family="Brown"     Age="23" />
 <Identification Name="Sarah" Family="Johnson"   Age="30" />
Run Code Online (Sandbox Code Playgroud)

我想要更改Age30到40之间的所有属性,如下所示:

 <Identification Name="John"  Family="Brown"     Age="40" /> 
 <Identification Name="Smith" Family="Johnson"   Age="35" /> 
 <Identification Name="Jessy" Family="Albert"    Age="60" />
 <Identification Name="Mike"  Family="Brown"     Age="23" />
 <Identification Name="Sarah" Family="Johnson"   Age="40" />
Run Code Online (Sandbox Code Playgroud)

xml sql xquery sql-server-2008

9
推荐指数
2
解决办法
2万
查看次数

在SQL Server中选择XML元素

我有一些XML需要使用SQL Server 2008解析.我认为我接近得到我想要的东西,但我没有正确的语法(我相信).

我有以下内容:

DECLARE @doc XML
SET @doc = '<ROOT>          
    <InvoiceDetail>
        <OrderId>1000000</OrderId>
        <OrderTypeId>2</OrderTypeId>
        <Id>2000</Id>
        <InvoiceItems>
            <InvoiceItem>
                <LineId>1</LineId>
                <Cd>123456</Cd>
                <Description>Item 1</Description>
                <Quantity>1</Quantity>
                <UnitPrice>99.990000</UnitPrice>
            </InvoiceItem>
            <InvoiceItem>
                <LineId>2</LineId>
                <Cd>234567</Cd>
                <Description>Item 2</Description>
                <Quantity>1</Quantity>
                <UnitPrice>89.990000</UnitPrice>
            </InvoiceItem>
        </InvoiceItems>
    </InvoiceDetail>
    <InvoiceDetail>
        <OrderId>1200000</OrderId>
        <OrderTypeId>1</OrderTypeId>
        <Id>3000</Id>
        <InvoiceItems>
            <InvoiceItem>
                <LineId>1</LineId>
                <Cd>234567</Cd>
                <Description>Item 2</Description>
                <Quantity>1</Quantity>
                <UnitPrice>89.990000</UnitPrice>
            </InvoiceItem>
            <InvoiceItem>
                <LineId>2</LineId>
                <Cd>345678</Cd>
                <Description>Item 3</Description>
                <Quantity>1</Quantity>
                <UnitPrice>79.990000</UnitPrice>
            </InvoiceItem>
        </InvoiceItems>
    </InvoiceDetail>
</ROOT>'

SELECT 
      Invoices.Node.value('@OrderId', 'VARCHAR(10)') 'OrderID'
    , Invoices.Node.value('@Id', 'INT') 'InvoiceId'
    , Items.Cd.value('.', 'VARCHAR(14)') 'ItemId'
FROM 
    @doc.nodes('//InvoiceDetail') Invoices(Node)
    CROSS APPLY Invoices.Node.nodes('./InvoiceItems/InvoiceItem/Cd') Items(Cd)
Run Code Online (Sandbox Code Playgroud)

我得到以下结果:

NULL    NULL …
Run Code Online (Sandbox Code Playgroud)

sql-server xpath xquery

9
推荐指数
1
解决办法
2万
查看次数

在XMLTYPE列中插入子节点

我有一个简单的查询:

WITH xtbl AS (
  SELECT XMLTYPE ('<a><b>1</b></a>') AS xcol 
    FROM DUAL
)
SELECT XMLQUERY ('copy $tmp := . 
                    modify 
                       insert node <c>2</c>
                         into $tmp/a/b
                       return $tmp'
                 PASSING xcol 
               RETURNING CONTENT) AS newxcol
  FROM xtbl;
Run Code Online (Sandbox Code Playgroud)

我想要做的是在节点内插入一个节点<c>,但Oracle 12c抛出了这个错误:<b><a>

ORA-19114: XPST0003 - error during parsing the XQuery expression: 
           LPX-00801: XQuery syntax error at 'EOF'
           5   -
           -  ^
Run Code Online (Sandbox Code Playgroud)

我希望输出为:

NEWXCOL
-------------
<a>
    <b>1</b>
    <c>2</c/>
</a>
Run Code Online (Sandbox Code Playgroud)

我已经尝试在Oracle Docs中寻找替换appendChildXML并遵循该示例但只得到了错误.

我知道这是非常基本的,我错过了一些明显的东西.请帮忙.

sql oracle xquery xmltype oracle12c

9
推荐指数
1
解决办法
4209
查看次数

使用XMLTABLE和xquery从xml中提取数据

我有以下XML:

<per:Person xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://www.something.com/2014/11/bla/webservice.xsd"
    xmlns:per="http://www.something.com/2014/11/bla/person">
    <per:Initials>E.C.</per:Initials>
    <per:FirstName>Erik</per:FirstName>
    <per:LastName>Flipsen</per:LastName>
    <per:BirthDate>1980-07-01</per:BirthDate>
    <per:Gender>Male</per:Gender>
</per:Person>
Run Code Online (Sandbox Code Playgroud)

从这个xml我想在PL/SQL中提取一些数据.我想使用XMLTABLE,因为不推荐使用EXTRACT和EXTRACTVALUE函数.

我可以使用此查询提取数据:

select pers.Initials,
       pers.Firstname
    into lsInitials,
         lsFirstname
    from
    XMLTABLE ('*:Person' passing pxRequest
    columns Initials           PATH '*:Initials',
            Firstname          PATH '*:FirstName'
    )  pers;
Run Code Online (Sandbox Code Playgroud)

我正在使用通配符作为命名空间,因为我真的不关心发送方用于命名空间的缩写,我知道无论如何获取我的数据的确切路径.

有了这段代码,我有两件事让我困惑:

编辑:

我发现当我删除元素的命名空间并使它们大写时,它可以工作.因此,列名称似乎需要匹配xml元素名称才能使其工作.我还没弄明白如何使用命名空间XML.

  • 该文档还指出"对于除FOR ORDINALITY列之外的每个结果列,您必须指定列数据类型",但是,如果没有它,它似乎工作正常.为列和我正在获取数据的变量指定它似乎也有点多余.如果不指定数据类型的任何想法可能会让我陷入困境?

可运行的代码示例:

SET SERVEROUTPUT ON;
DECLARE

    pxRequest xmltype := xmltype('<per:Person xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
                                    xsi:schemaLocation="http://www.something.com/2014/11/bla/webservice.xsd"
                                    xmlns:per="http://www.something.com/2014/11/bla/person">
                                    <per:Initials>E.C.</per:Initials>
                                    <per:FirstName>Erik</per:FirstName>
                                    <per:LastName>Flipsen</per:LastName>
                                    <per:BirthDate>1980-01-01</per:BirthDate>
                                    <per:Gender>Male</per:Gender>
                                </per:Person>');
    lsInitials  varchar2(100);
    lsFirstname varchar2(100);                                


begin

    select pers.Initials,
           pers.Firstname
        into lsInitials,
             lsFirstname
        from
        XMLTABLE ('*:Person' passing pxRequest
        columns Initials           PATH '*:Initials', …
Run Code Online (Sandbox Code Playgroud)

oracle xquery plsql xmltable

9
推荐指数
1
解决办法
3012
查看次数

SQL Server查询元素值的xml属性

对不起,如果这是在其他地方,我发现了很多类似的例子,但我一直无法使用我的数据.2天后,我需要一个答案:(

基本上有一个SQL Server表,其中包含一个包含XML数据的列.此数据包含我需要提取的值.

这是我的XML.

  <CustomFields xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://www.kaseya.com/vsa/2007/12/ServiceDeskDefinition.xsd">
    <Field fieldName="AutoCategory">Event Log</Field>
    <Field fieldName="SType">Event Log</Field>
    <Field fieldName="STag1">AgentGuid</Field>
    <Field fieldName="STag2">AlertRegistrationId</Field>
    <Field fieldName="STag3">LogType</Field>
    <Field fieldName="SValue1">619764177412541</Field>
    <Field fieldName="SValue2">104</Field>
    <Field fieldName="SValue3">1380569194</Field>
    <Field fieldName="SdTicketId">RPSv1006330</Field>
    <Field fieldName="AgentName">bla bla</Field>
    <Field fieldName="MachineGroupGuid">86115414719112271316891312</Field>
    <Field fieldName="OrgFk">59165166782128125214185317</Field>
    <Field fieldName="GuidAgent">619764177412541</Field>
    <Field fieldName="AlertCount">0</Field>
    <Field fieldName="TicketTitle">bla bla</Field>
    <Field fieldName="LegacyId">152262</Field>
    <Field fieldName="LegacyRef">152262</Field>
    <Field fieldName="CwStatus">2</Field>
    <Field fieldName="CwTicketId">89495</Field>
</CustomFields>
Run Code Online (Sandbox Code Playgroud)

我需要能够提取与CwTicketId字段名称关联的值.

所以从本质上讲,我想通过XML来查找带有fieldName = "CwTicketId"和返回的节点89495或等价值.

下面是我自己提出的代码,它将值拉出来,但问题是有时XML的排序方式不同,因此值并不总是在我指定的行上,因此它返回准确的数据.

;WITH XMLNAMESPACES(DEFAULT N'http://www.kaseya.com/vsa/2007/12/ServiceDeskDefinition.xsd')
SELECT 
    ref as ServiceDeskID, 
    sdSummary as ServiceDeskSummary,
    customFields.value('(/CustomFields/Field/node())[17]', 'varchar(100)') as LegacyIDTicketing,
    customFields.value('(/CustomFields/Field/node())[19]', 'varchar(100)') as CWIDTicketing …
Run Code Online (Sandbox Code Playgroud)

xml sql t-sql sql-server xquery

8
推荐指数
2
解决办法
2万
查看次数

通过XCC将XQuery xml元素作为外部变量传递给Marklogic

我们有一个相当简单的XQuery和Groovy代码如下.Xquery代码:

declare variable $criteria as element(criteria) external ;

<scopedInterventions>{
$criteria/equals/field
}</scopedInterventions>
Run Code Online (Sandbox Code Playgroud)

这是试图调用它的测试代码

def uri = new URI("xcc://admin:admin@localhost:8001")

def contentSource = ContentSourceFactory.newContentSource(uri)

def request = session.newModuleInvoke("ourQuery.xqy")
def criteria =
"""<criteria>
<equals>
<field>status</field>
<value>draft</value>
</equals>
</criteria>
"""

request.setNewVariable("criteria",ValueType.ELEMENT, criteria);

session.submitRequest(request).asString()
}
Run Code Online (Sandbox Code Playgroud)

我们在执行时遇到此错误:

引起:com.marklogic.xcc.exceptions.XQueryException:XDMP-LEXVAL:xs:QName("element()") - 无效的词汇值"element()"[Session:user = admin,cb = {default} [ ContentSource:user = admin,cb = {none} [provider:address = localhost/127.0.0.1:9001,pool = 1/64]] [客户端:XCC/5.0-3,服务器:XDBC/5.0-3] expr :xs:QName("element()")位于com.marklogic.xcc.impl.handlers.ServerExceptionHandler.handleResponse(ServerExceptionHandler.java:34)的com.marklogic.xcc.impl.handlers.EvalRequestController.serverDialog(EvalRequestController.java) :83)com.marklogic.xcc.impl.handlers.AbstractRequestController.runRequest(AbstractRequestController.java:84)at com.marklogic.xcc.impl.SessionImpl.submitRequestInternal(SessionImpl.java:373)at com.marklogic.xcc. impl.SessionImpl.submitRequest(SessionImpl.java:356)com.zynx.galen.dataaccess.MarkLogicUtilities.executeQueryWithMultipleXMLParameters(MarkLogicUtilities.groovy:52)at com.zynx.galen.repositories.ScopedInterventionService.getScopedInterventionsByCriteria(ScopedInterventionService.groovy:20)... 1 more

任何帮助都会受到高度赞赏.

xquery marklogic

8
推荐指数
1
解决办法
2737
查看次数