Talend tXMLMap에서 XML을 가공할 때의 요점
5861 단어 Talend
1. Create empty element
Create empty 요소를 가짜로 설정해도 XML 확인 시 빈 노드가 생성되는 경우가 많습니다.
고장인 줄 알았는데 그냥 몰라서 적어놨어요.
값이나 속성이 빈 문자라면 노드를 생성합니다.
숫자나 속성이null이면 생성되지 않습니다.
그런 일이야.
위에서 설명한 대로 XML을 설정하면 내보낸 XML은 다음과 같습니다.
직접 대입null
하면 컴파일 오류가 발생하기 때문에 상기 설정true ? null : ""
에서<root>
<EmptyStringNode>
<item></item> <!-- 値が空文字 -->
</EmptyStringNode>
<NullWithEmptyAttr dummy=""/> <!-- 属性が空文字 -->
</root>
Create empty element가 진짜라면 이렇게 됩니다.비교해 보면 일목요연하다.<root>
<EmptyStringNode>
<item></item> <!-- 値が空文字 -->
</EmptyStringNode>
<NullNode>
<item/> <!-- 値がnull -->
</NullNode>
<NullWithEmptyAttr dummy=""> <!-- 属性が空文字 -->
<item/>
</NullWithEmptyAttr>
<NullWithNullAttr dummy=""> <!-- 属性がnull -->
<item/>
</NullWithNullAttr>
</root>
2. 멀티 루프와 All in one
XML에서 XML로 값을 직접 이동하려면 loop 요소의 위치와 All in one 설정에 주목합니다.
예를 들어 XML 전체를 한 번 복사하고 싶다고 가정하십시오. (실제 상황은 더욱 복잡할 수 있습니다.)<?xml version="1.0" encoding="UTF-8"?>
<root>
<loop1> <!-- 親1に対して子3 -->
<item>
<A>A1</A>
<B>B1</B>
</item>
<item>
<A>A2</A>
<B>B2</B>
</item>
<item>
<A>A3</A>
<B>B3</B>
</item>
</loop1>
<loop2> <!-- 親1に対して子2 -->
<item>
<C>C1</C>
<D>D1</D>
</item>
<item>
<C>C2</C>
<D>D2</D>
</item>
</loop2>
</root>
아래와 같이 설정하면 전부 복사할 수 있습니다.
필요한 순환 횟수는 3+2회, 총 5회입니다.결과는 All in one으로 요약됩니다.
All in one을 가짜로 설정하려고 하면 rows 5개가 생성되는지 확인할 수 있습니다.
3. 트리 모드 편집기
나 자신도 완전히 어리석은 것은 산타클로스의 존재를 잠시 눈치채지 못했다는 것이다.
그 전에 XML의 각 노드의 유형을 지정할 수 없다고 생각합니다.모든 문자열 처리?등의 오해가 있었다.
예를 들어 날짜로 식별할 수 있는 값은 위의 그림과 같이 날짜 형식으로 직접 읽힌다.
TalendDate로 갑니다.ParseDate()를 가공하지 않아도 됩니다.(해봤다.)
4. 사은품: Doocument형과 Object형의 상호 변환
예를 들어 XML 데이터를 하위 작업에 맡기려고 해도 context를 통해 Docomment형을 전달할 수 없다.
하지만 일단 Object형으로 바뀌면 맡길 수 있어요.
<root>
<EmptyStringNode>
<item></item> <!-- 値が空文字 -->
</EmptyStringNode>
<NullWithEmptyAttr dummy=""/> <!-- 属性が空文字 -->
</root>
<root>
<EmptyStringNode>
<item></item> <!-- 値が空文字 -->
</EmptyStringNode>
<NullNode>
<item/> <!-- 値がnull -->
</NullNode>
<NullWithEmptyAttr dummy=""> <!-- 属性が空文字 -->
<item/>
</NullWithEmptyAttr>
<NullWithNullAttr dummy=""> <!-- 属性がnull -->
<item/>
</NullWithNullAttr>
</root>
XML에서 XML로 값을 직접 이동하려면 loop 요소의 위치와 All in one 설정에 주목합니다.
예를 들어 XML 전체를 한 번 복사하고 싶다고 가정하십시오. (실제 상황은 더욱 복잡할 수 있습니다.)
<?xml version="1.0" encoding="UTF-8"?>
<root>
<loop1> <!-- 親1に対して子3 -->
<item>
<A>A1</A>
<B>B1</B>
</item>
<item>
<A>A2</A>
<B>B2</B>
</item>
<item>
<A>A3</A>
<B>B3</B>
</item>
</loop1>
<loop2> <!-- 親1に対して子2 -->
<item>
<C>C1</C>
<D>D1</D>
</item>
<item>
<C>C2</C>
<D>D2</D>
</item>
</loop2>
</root>
아래와 같이 설정하면 전부 복사할 수 있습니다.필요한 순환 횟수는 3+2회, 총 5회입니다.결과는 All in one으로 요약됩니다.
All in one을 가짜로 설정하려고 하면 rows 5개가 생성되는지 확인할 수 있습니다.
3. 트리 모드 편집기
나 자신도 완전히 어리석은 것은 산타클로스의 존재를 잠시 눈치채지 못했다는 것이다.
그 전에 XML의 각 노드의 유형을 지정할 수 없다고 생각합니다.모든 문자열 처리?등의 오해가 있었다.
예를 들어 날짜로 식별할 수 있는 값은 위의 그림과 같이 날짜 형식으로 직접 읽힌다.
TalendDate로 갑니다.ParseDate()를 가공하지 않아도 됩니다.(해봤다.)
4. 사은품: Doocument형과 Object형의 상호 변환
예를 들어 XML 데이터를 하위 작업에 맡기려고 해도 context를 통해 Docomment형을 전달할 수 없다.
하지만 일단 Object형으로 바뀌면 맡길 수 있어요.
예를 들어 XML 데이터를 하위 작업에 맡기려고 해도 context를 통해 Docomment형을 전달할 수 없다.
하지만 일단 Object형으로 바뀌면 맡길 수 있어요.
context.xmlDoc = input_row.payload;
로 대입하다.(payload는 Docoment형)output_row.payload = (Document)context.xmlDoc;
에서 분배하고 되돌려줍니다.하위 작업:
(이상)
Reference
이 문제에 관하여(Talend tXMLMap에서 XML을 가공할 때의 요점), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/Suketta/items/46ad9d994f2f4b916b09텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)