2012-01-03 10 views
0

xmlファイルは1つあります。ファイル内のXMLノードをsedまたはtrまたはperlで変更する

<T1> 
    <S1 > D1 </S1> 
<S1>D2 </ S1> 
<S2>D3 </S2> 
<S3> D4</S3> 
</T1 > 

私はSEDにしようとしたが、それが複数のために働いていません。この

<T1> 
<S1>D5</S1> 
<S1>D6</S1> 
<S2>D7</S2> 
<S3>D8</S3> 
</T1> 

のようなものにデータと書式を変更する:タブとスペースのランダムな位置でsample.xmlに言うことができますここではラインケースです。 どのように私は同じ達成することができます。

答えて

1

からすべての空白を削除しますファイル

$ cat test.xml 
<T1> 
    <S1 > D1 </S1> 
     <S1>D2 </ S1> 
     <S2>D3 </S2> 
     <S3> D4</S3> 
     </T1 > 

xmllintコマンド状態理由:

、その後

としては、それが有効なXMLファイルではありません、@chorobaして、入力データを指摘xmllint

$ sed 's/[[:space:]]//g' test.xml | xmllint --format - 
<?xml version="1.0"?> 
<T1> 
    <S1>D1</S1> 
    <S1>D2</S1> 
    <S2>D3</S2> 
    <S3>D4</S3> 
</T1> 

背景を使用して、それをフォーマット
$ xmllint test.xml 
test.xml:3: parser error : expected '>' 
     <S1>D2 </ S1> 
       ^
test.xml:3: parser error : Opening and ending tag mismatch: S1 line 3 and unparseable 
     <S1>D2 </ S1> 
       ^
test.xml:4: parser error : StartTag: invalid element name 
     <S2>D3 </S2> 
     ^
test.xml:4: parser error : Opening and ending tag mismatch: T1 line 1 and S2 
     <S2>D3 </S2> 
        ^
test.xml:5: parser error : Extra content at the end of the document 
     <S3> D4</S3> 
     ^

1
sed -r 's/\s//g' yourXML 

上記のsed行は機能しますか?

kent$ cat v.xml 
<T1> 
    <S1 > D1 </S1> 
<S1>D2 </ S1> 
<S2>D3 </S2> 
<S3> D4</S3> 
</T1 > 

kent$ sed -r 's/\s//g' v.xml 
<T1> 
<S1>D1</S1> 
<S1>D2</S1> 
<S2>D3</S2> 
<S3>D4</S3> 
</T1> 

xmlファイルには、タグと値にスペースが含まれていないようにしてください。

1

<または</以降のスペースは、XMLでは使用できません。 XMLは整形式ではないため、特殊なツールでは処理できません。 Normaly、この動作するはずです:

xmllint --format file.xml 
+0

xmllintを提案するための+1 –

1

これは動作するはずです - tr -d ' ' < file

あなたのファイル:

[jaypal:~/Temp] cat file 
<T1> 
    <S1 > D1 </S1> 
<S1>D2 </ S1> 
<S2>D3 </S2> 
<S3> D4</S3> 
</T1 > 

テスト:

[jaypal:~/Temp] tr -d ' ' < file 
<T1> 
<S1>D1</S1> 
<S1>D2</S1> 
<S2>D3</S2> 
<S3>D4</S3> 
</T1> 
関連する問題