gpt4 book ai didi

python - 原子饲料 : script to combine multiple items into one?

转载 作者:行者123 更新时间:2023-12-02 02:31:37 25 4
gpt4 key购买 nike

我想编写一个结合多个 <author> 的命令行脚本标签从一个原子馈入一个原子。例如,像这样的条目:

<entry>
<id>someid</id>
<published>somedate</published>
<title>Title</title>
<summary>Summary</summary>
<author>
<name>Author One</name>
</author>
<author>
<name>Author Two</name>
</author>
<author>
<name>Author Three</name>
</author>
</entry>

应该变成:

<entry>
<id>someid</id>
<published>somedate</published>
<title>Title</title>
<summary>Summary</summary>
<author>
<name>Author One, Author Two, Author Three</name>
</author>
</entry>

我认为我可以使用 Perl 和正则表达式自己完成此操作,但是,由于使用正则表达式解析 XML 不是一个好主意,因此我将感谢使用适当的 xml 解析器的更优雅的解决方案。

最佳答案

Ted 的想法是正确的,但有些事情的完成方式比需要的更复杂,而且他们不知道 Atom 格式的属性(例如它对 namespaces 的使用)。

use XML::LibXML               qw( );
use XML::LibXML::XPathContext qw( );

my $xpc = XML::LibXML::XPathContext->new();
$xpc->registerNs(a => 'http://www.w3.org/2005/Atom');

# See XML::LibXML::Parser for more ways to create the document object.
my $doc = XML::LibXML->load_xml( location => 'atom.xml' );

for my $entry_node ($xpc->findnodes('/a:feed/a:entry', $doc)) {
my @author_names;
for my $author_node ($xpc->findnodes('a:author', $entry_node)) {
push @author_names, $xpc->findvalue('a:name', $author_node);
$author_node->unbindNode();
}

my $author_node = XML::LibXML::Element->new('author');
my $name = $author_node->appendTextChild('name', join(", ", @author_names));
$entry_node->appendChild($author_node);
}

$doc->toFile('atom.new.xml');

关于python - 原子饲料 : script to combine multiple <author> items into one?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64957598/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com