2014-11-16 4 views
0

나는 다음과 같은 형식으로 여러으로 item 노드를 XML 데이터를 저장하는 BaseX을 사용하고 있습니다 :XQuery를 사용하여 BaseX XML 데이터베이스의 속성을 업데이트하는 방법은 무엇입니까?

<root> 
    <item id="Root" parent_id="0" type="folder"> 
    <content> 
     <name>Root</name> 
    </content> 
    </item> 

    <item id="One" parent_id="Root" type="file"> 
    <content> 
     <name>First File in the Tree</name> 
    </content> 
    </item> 

    <item id="Two" parent_id="Root" type="file"> 
    <content> 
     <name>Second File in the Tree</name> 
    </content> 
    </item> 
</root> 

내가 다른 item 노드의 id 속성에 '항목'노드 중 하나에 parent_id을 업데이트하려합니다.

XQuery 표현식 실행하기 전에 나무 :

루트를
난을 알아 내려고 노력하고있는 트리

의 나무
∟ 두 번째 파일에서 ∟ 첫 번째 파일 올바른 XQuery 표현을 사용하여 item 중 하나의 부모를 root에서 "one"item으로 변경하여 내 트리가 다음과 같이 보이게하십시오. 이 :

예상 결과 트리 :

루트 parent_id 컨트롤이, 내가 속성 이후 트리

의 나무
∟ 두 번째 파일에서

∟ 첫 번째 파일 정확하게 업데이트하려고합니다. 당신이해야 할 모든이 @parent_id 특성을 업데이트하는 경우

답변

2

replace value of node //item[@id='Two']/@parent_id with 'One' 

같은 간단한 업데이트 쿼리를 사용하지만이 사실이지만 단지의 XML 트리을 변경하지 않을 하나의 은 XML로 표현하면입니다 (그러나 이것이 귀하의 질문과 관련 있다고 생각합니다). 나무를 저장하는 더 XML과 같은 접근 방식은 당신이 XML에 갖고 싶어 나무 매핑 직접 것 :

<root> 
    <item id="Root" type="folder"> 
    <content> 
     <name>Root</name> 
    </content> 
    <item id="One" type="file"> 
     <content> 
     <name>First File in the Tree</name> 
     </content> 
     <item id="Two" type="file"> 
     <content> 
      <name>Second File in the Tree</name> 
     </content> 
     </item> 
    </item> 
    </item> 
</root> 

또는 더 간결을 들고 동일한 정보 :

<folder id="Root" name="Root"> 
    <file id="One" name="First File in the Tree"> 
    <file id="Two" name="Second File in the Tree" /> 
    </file> 
</folder>