Итак, у меня есть небольшой XML-документ, foobar.xml
<?xml version="1.0" standalone="no"?>
<!DOCTYPE foo SYSTEM "bar.dtd">
<title _FORMAT="XXX.XXX" _QUANTITY="1" _DEVICENAME="XXX" _JOBNAME="FOOBAR">
<subtitle>
<variable name="x">A-1234567</variable>
</subtitle>
</title>
и немного Питона,
with open('foobar.xml', 'rt') as f:
tree = ElementTree.parse(f)
# Loop over all elements in 'tree' in section order
for node in tree.getiterator():
if node.tag == "variable":
for z in range(number):
if len(str(start)) == 7:
accession = "A-" + str(start)
# This simply adds leading zeros if there are < 7 digits
elif len(str(start)) < 7:
accession = "A-" + ("0" * (7 - len(str(start))) + str(start))
start += 1
# Assign 'accession' to the node text
node.text = accession
tree.write("foobar.xml")
else:
continue
, который прекрасно находит интересующий меня тег узла и обрабатывает его путем итерации по диапазону, каждый раз заменяя текст узла и записывая XML-файл в файл. Есть только одна проблема: мне нужно, чтобы это произошло в Ruby.
Пока у меня есть
doc = Document.new(File.new("foobar.xml"))
doc.elements.each() do |element|
element.elements.each() do |child|
child.elements.each() do |sub| # probably wrong
for z in 0...$number
if $start.to_s.length == 7
accession = "A-" + $start.to_s
else
accession = "A-" + ("0" * (7 - $start.to_s.length)) + $start.to_s
end
$start += 1
# need to assign here and write to file or assign to variable
end
end
end
end
Это мой первый раз, когда я обрабатываю XML в Ruby, и мне не удается понять синтаксис. Моя цель - по сути реплицировать Python, изменяя текст узла для каждой итерации цикла, а затем записывая его в файл XML. Любые предложения приветствуются.