要素属性を読みやすくするために、XML文書の形式をどのように指定しますか?
1つまたは2つの要素を返しますが、何百もの属性を持つXMLベースのWebサービスがあります。開発時には時々このサービスをデバッグする必要がありますが、出力はただブロブなので難しいかもしれません。
考えてみてください:
$ echo '<root><foo z="26" y="25" x="24" a="1" b="2" c="3" d="something more"/></root>' | xmllint --format -
<?xml version="1.0"?>
<root>
<foo z="26" y="25" x="24" a="1" b="2" c="3" d="something more"/>
</root>
私はtrがうまくいきますが、理想的にはうまくいきませんでした。
$ echo '<root><foo z="26" y="25" x="24" a="1" b="2" c="3" d="something more"/></root>' | xmllint --format - | tr ' ' \\\n
<?xml
version="1.0"?>
<root>
<foo
z="26"
y="25"
x="24"
a="1"
b="2"
c="3"
d="something
more"/>
</root>
理想的には、出力はxmllintとfunky hackの間にあります。
<?xml version="1.0"?>
<root>
<foo
z="26"
y="25"
x="24"
a="1"
b="2"
c="3"
d="something more"/>
</root>
これにより、物を探したりソートしたりすることができます。
ベストアンサー1
grep/sed を使用しないことをお勧めします。 XMLでは機能しません。
perl
しかし幸いにも、XML::Twig
必要に応じて値を再フォーマットして抽出できる、あらゆる種類の魔法機能があります。値を抽出したり、ユースケースに応じて要素を処理したりする必要があるget_xpath
場合に適しています。twig_handlers
(または繰り返し使用するか、children
同様に使用してください)。
しかし、とにかく - XML形式を指定してください。
#!/usr/bin/perl
use strict;
use warnings;
use XML::Twig;
my $twig = XML::Twig->new(
pretty_print => 'nsgmls',
);
$twig->parse (\*DATA);
$twig->print;
__DATA__
<?xml version="1.0"?>
<root>
<foo
z="26"
y="25"
x="24"
a="1"
b="2"
c="3"
d="something more"/>
</root>
印刷物はnsgmls
以下を提供します。
<?xml version="1.0"?>
<root
><foo
a="1"
b="2"
c="3"
d="something more"
x="24"
y="25"
z="26"
/></root>
indented_a
あなたのため:
<?xml version="1.0"?>
<root>
<foo
a="1"
b="2"
c="3"
d="something more"
x="24"
y="25"
z="26"
/>
</root>
これがあなたが探しているものとかなり近いようですか?