我有一个xml文件。让我们说带有制表符和空格随机位置的sample.xml:
<T1>
<S1 > D1 </S1>
<S1>D2 </ S1>
< S2 >D3 </S2>
<S3> D4</S3>
</T1 >
我想将数据和格式更改为类似的内容
<T1>
<S1>D5</S1>
<S1>D6</S1>
<S2>D7</S2>
<S3>D8</S3>
</T1>
我在sed中尝试过,但它不适用于多行情况,因为这里。 我怎么能实现同样的目标。
答案 0 :(得分: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 :(得分:1)
XML中不允许<
或</
之后的空格。您的XML格式不正确,因此无法通过专门工具进行处理。 Normaly,这应该有效:
xmllint --format file.xml
答案 2 :(得分: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>
答案 3 :(得分:1)
从文件中删除所有空格,然后使用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>
正如@choroba所指出的,您的输入数据不是有效的XML文件:
$ cat test.xml
<T1>
<S1 > D1 </S1>
<S1>D2 </ S1>
< S2 >D3 </S2>
<S3> D4</S3>
</T1 >
xmllint命令说明原因:
$ 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>
^