2017-10-27 9 views
1

私はxmllintをSQLのtransform XMLに使ってみることができます。私はxmllintを使うことができますが見つかりませんでした

私はこのXMLを持っており、私はSQLで変換が必要です。

<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> 

I変換

#!/bin/bash 

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

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

そして、私の出力のためxmllintとbashでこのスクリプトを持っている:私はXML_LOAD()を使用しようとすることができ

XPath set is empty 

。 SQLサーバーでは私が見つかりませんでした。データはプライベートなので削除されます。

答えて

0

XPathで何を期待していますか?

//*/*/text() 

そして、これはより深い一つのノードを移動して、text()を取り、のために任意のノード深い検索を行います。

私はあなたが達成したいのか、見当がつかないあなたのXMLは、属性中心である...そして、デフォルトの名前空間(xmlns)があり...

。ちょうどあなたが*:この

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

のようなものを試してみてくださいテストするための名前空間のワイルドカードである(しかし、より良い、それを正しく宣言!)。 <CommunicationLog>から開始し、下のすべてのノードを反復処理します。それらのすべてにタイムスタンプ属性があるようです。これは何かを返す必要があります...

あなたの方法を見つけることができない場合は、XMLにいくつかのダミーデータを挿入し、期待される出力を記述してください。

関連する問題