2015-07-14 2 views
1

Я пытаюсь использовать XML задачу в SSIS, чтобы получить значение идентификатора сессии из этого XML:Как получить узел XML с помощью XML задачу SSIS XPATH

<?xml version="1.0" encoding="utf-16"?> 
<AuthenticationResult xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> 
    <authenticated xmlns="[link]">true</authenticated> 
    <sessionId xmlns="[link]">0000-0000000-00000000000-000000</sessionId> 
    <loginid xmlns="[link]">000000</loginid> 
    <login_name xmlns="[link]">[Username]</login_name> 
    <user_nbr xmlns="[link]">0000</user_nbr> 
    <partition_id xmlns="[link]">3</partition_id> 
    <is_parent_mail_user xmlns="[link]">0</is_parent_mail_user> 
    <parent_user_id xmlns="[link]" /> 
    <user_id xmlns="[link]">[username]</user_id> 
</AuthenticationResult> 

Однако я не могу получить задание вернуться сессия ID

установка Задача:

Operation Type: XPATH 
SourceType: File connection 
Source: testfile.xml 

SaveOperationResult: True 
DestinationType: Variable 
Destination: User::SessionID 
OverwriteDestination: True 

SecondOperandType: Direct input 
SecondOperand: //sessionId 

Namespaces: (Collection) 
PutResultsInOneNode: False 
XPathOperation: Values 

не указаны пространства имен.

Я гугле все вокруг, но я не могу понять, почему он не работает ...

ответ

1

Вы можете посмотреть на this answer для предложений с синтаксисом XPath. В основном вы можете использовать local-name() для чтения имен элементов без пространства имен. Вы должны быть в состоянии извлечь эту сессионный значение Id с:

<local name="sessionId"/> 
<xmltask source="${xml.file}"> 
    <copy path="/*[local-name()='AuthenticationResult']/*[local-name()='sessionId']/text()" 
      property="sessionId"/> 
</xmltask> 
<echo message="sessionId = ${sessionId}"/> 

В качестве альтернативы, упрощенным синтаксисом ниже мощь работы:

<xmltask source="${xml.file}"> 
    <copy path="//:AuthenticationResult/:sessionId/text()" 
      property="sessionId"/> 
</xmltask> 
+1

Этот ответ помог много, Это как Операнд работал:/*/* [local-name() = 'sessionId'] Спасибо – JasonBluefire

+0

Отлично! Я исправил пару синтаксических проблем с моим более ранним ответом, который мог бы объяснить, что они не работают напрямую. Я сожалею об этом, но надеюсь, что кто-то другой сможет его использовать. Благодарим вас за то, что вы приняли несовершенный ответ. –