2017-10-27 3 views
1

SQL에서 XML 변환에 xmllint를 사용해 볼 수 있습니다.xmllint를 사용할 수는 있지만 찾을 수 없습니다.

이 XML이 있고 SQL에서 변환이 필요합니다.

#!/bin/bash 

file="$1" 
table=$(xmllint --xpath "name()" "$file") 
value=$(xmllint --xpath "//*/*/text()" "$file") 

cat << EOF 
INSERT INTO \`${table}\` 
VALUES 
(${value}) 
EOF 

그리고 내 출력 변환을위한

<CommunicationLog xmlns="http://knx.org/xml/telegrams/01"> 
    <RecordStart Timestamp="" Mode="" Host="" ConnectionName="" ConnectionOptions="" ConnectorType="" MediumType="" /> 
    <Telegram Timestamp="" Service="" FrameFormat="" RawData="" /> 
    <Telegram Timestamp="" Service="" FrameFormat="" RawData="" /> 
    <RecordStart Timestamp="" Mode="" Host="" ConnectionName="" ConnectionOptions="" ConnectorType="" MediumType="" /> 
    <Telegram Timestamp="" Service="" FrameFormat="" RawData="" /> 
    <Telegram Timestamp="" Service="" FrameFormat="" RawData="" /> 
    <RecordStop Timestamp="" /> 
</CommunicationLog> 

나는 xmllint가와 bash는이 스크립트가 :

XPath set is empty 

내가 (사용 XML_LOAD을 시도 할 수 있습니다) SQL 서버에 있지만 나를 찾지 못했습니다. 비공개 데이터이므로 삭제됩니다.

답변

0

XPath으로 무엇을 기대합니까?

//*/*/text() 

노드에 대한 깊은 검색을 할 것입니다, 다음 하나 개의 노드 깊은 가서 text()을.

당신의 XML은 속성 중심입니다 ... 그리고 기본 네임 스페이스 (xmlns) ...

나는 아무 생각이 당신이 무엇을 달성하고자하는,있다. 그냥 테스트하기 위해이

/*:CommunicationLog/*:*/@*:Timestamp  

*: 같은 네임 스페이스의 와일드 카드는 시도 (그러나 더 나은 제대로 선언!) 있습니다. <CommunicationLog>에서 시작하여 아래의 모든 노드를 반복합니다. 그들 모두는 타임 스탬프 속성을 갖고있는 것처럼 보입니다. 이것은 뭔가를 반환해야합니다 ...

당신의 탈출구를 찾지 못하면 XML에 약간의 더미 데이터를 삽입하고 예상되는 결과를 기술하십시오.

관련 문제