2008-09-23 7 views
4

문자열을 노드로 변환하고 싶습니다. 노드를 사용하도록 정의 된 메서드가 있지만 내가 가진 값은 문자열입니다 (하드 코딩 된 것입니다). 이 문자열을 노드로 변환하려면 어떻게해야합니까?XQuery에서 문자열을 노드로 변환하는 방법은 무엇입니까?

define function foo($bar as node()*) as node() { 
    (: unimportant details :) 
} 

내가 foo는 방법에 전달하려는 문자열을 가지고 :

그래서,는 XQuery 방법을 제공. 메서드가 문자열을 받아 들일 수 있도록 문자열을 노드로 어떻게 변환합니까?

+0

문자열 일부는 노드로 구문 분석 할, 아니면 그냥 싶어 XML을 탈출 포함되어 있습니까 문자열을 텍스트 노드로 변환하여이 특정 함수에 전달할 수 있습니까? – JeniT

답변

8

MarkLogic 솔루션 :

xdmp:unquote($string). 

을 반대로 당신이 사용하는 것이 문자열로 노드를 변환 할 경우 :

노드로 문자열을 변환하는 가장 좋은 방법은 사용하는 것입니다

xdmp:quote($node). 

언어 무신론자 솔루션 :

문자열

노드입니다 :이 질문에

fn:string($node) 
+1

xdmp : 따옴표 및 따옴표는 XQuery 언어 사양의 일부가 아니며 MarkLogic 확장 라이브러리 집합의 일부입니다. 문자열 리터럴에서 노드로 XML로드는 사용되는 XQuery 엔진에 따라 다릅니다. http://www.xml.com/lpt/a/1660 –

+0

또한 문자열 코드의 노드는 포스터가 원하는 것을 수행하지 않을 것입니다. $ node 아래에있는 모든 노드의 연결된 문자열 값만 반환합니다. 실제 XML 구문이 아닙니다. () –

+2

:) 그는 * 포스터입니다. –

3

대답은 사용되는 어떤 엔진에 따라 달라집니다. 예를 들어, Saxon의 사용자는 saxon:parse 메서드를 사용합니다.

사실 XQuery 사양에는이 기능이 내장되어 있지 않습니다.

일반적으로 당신은 정말 당신이 CDATA 섹션에서 일부 임베디드 XML을 끌어 필요한 경우이를 사용해야합니다 말하기. 그렇지 않으면 파일 시스템에서 파일을 읽거나 XML을 직접 인라인으로 선언 할 수 있습니다.

대부분 하드 코딩 된 문자열 대신 선언 형식을 사용합니다. 당신은 문자열의 밖으로 텍스트 노드를 만들려면 (사용 스타일러스 스튜디오)

declare namespace my = "http://tempuri.org"; 

declare function my:foo($bar as node()*) as node() { 
    <unimportant></unimportant> 
} ; 

let $bar := <node><child></child></node> 

return my:foo(bar) 
8

, 그냥 텍스트 노드 생성자 사용

text { "your string goes here" } 

또는 당신은을 만들 선호하는 경우 요소 문자열 내용과 함께 요소을 다음과 같이 구성 할 수 있습니다.

element (some-element) { "your string goes here" } 
6

XML 마크 업이 포함 된 문자열에 대해 이야기하는 경우 표준 솔루션 (XPath/XQuery 함수 3)이 있습니다.0)뿐만 아니라 : fn:parse-xml()

  • 노드 문자열 : 노드에

  • 관련 문제