我必须在目录中创建大约500个xml文件的副本,我设法完成了。作为下一个问题的一部分,我想重命名文件中的特定文本。我该怎么做呢?
这就是我所拥有的: 1000.xml,1001.xml,1002.xml ......
1000.xml:
$('html').addClass('jsEnabled');
$(function(){
$('#particles-js').hide(0).delay(1000).fadeIn(400);
$('header').hide(0).delay(1000).fadeIn(300);
$('#intro1').hide(0).delay(1300).fadeIn(300);
$('#intro2').hide(0).delay(1800).fadeIn(300);
$('#down').hide(0).delay(2000).fadeIn(300);
$('#arrow').delay(2200).show('slide',{direction:'up'},400);
/// Scroll down
$(window).scroll(function(){
$('#intro').css("opacity",1-$(window).scrollTop()/300);
});
$(window).scroll(function(){
$('#arrow').css("opacity",1-$(window).scrollTop()/100);
});
$(window).scroll(function(){
if($(this).scrollTop()>50){
$('#case-studies,#connect').fadeIn();
} else {
$('#case-studies,#connect').fadeOut();
}
/// Scroll back to top
$("a[href='#case-studies']").click(function() {
$("html, body").animate({ scrollTop: 0 }, "slow");
return false;
});
});
$("body").css("height",window.outerHeight + 200 + "px");
$(window).on('resize',function(){ /// for resize
$('#intro').css('margin-top', function () {
return ($(window).height() - $(this).height()) / 3
});
}).resize();
/// Fadeout on page load
$("a.transition").click(function(event){
event.preventDefault();
linkLocation = this.href;
$("body").fadeOut(1000,redirectPage);
});
function redirectPage() {
window.location = linkLocation;
}
$('#back-to-middle').on('click', function (e) {
e.preventDefault();
$('html,body').animate({
scrollTop: 600
});
});
});
基本上,这会复制到所有其他文件,但具有数字和时间顺序的名称。如何用“文件名”替换“1000”?所以,新文件应该是 - 1001.xml:
<?xml version="1.0" encoding="UTF-8"?>
<addresses xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation='test.xsd'>
<address>
<name>Joe Tester</name>
<street>Baker street 5</street>
<id>1000</id>
</address>
<count>1000</count>
我只能这样做 - <?xml version="1.0" encoding="UTF-8"?>
<addresses xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation='test.xsd'>
<address>
<name>Joe Tester</name>
<street>Baker street 5</street>
<id>1001</id>
</address>
<count>1001</count>
</addresses>
将用1001替换所有1000,而不是文件名。
答案 0 :(得分:3)
您已对其进行了标记OptionDateTimeColumn
,以便我可以这样做:
perl
这使用#!/usr/bin/perl
use strict;
use warnings;
use XML::Twig;
#iterate the files.
foreach my $xml_file ( glob "*.xml" ) {
#regex match the number for the XML.
my ( $file_num ) = $xml_file =~ m/(\d+).xml/;
#create an XML::Twig, and set it to 'indented' output.
XML::Twig -> new ( pretty_print => 'indented',
#matches elements and runs the subroutine on 'it'. ($_) is the
#current element in this context.
twig_handlers => { 'address/id' => sub { $_ -> set_text($file_num) },
'count' => sub { $_ -> set_text($file_num) },
#parsefile_inplace reads and writes back any changes to the file
#as it goes.
} ) -> parsefile_inplace($xml_file);
}
,允许您进行就地编辑。它通过元素处理程序执行此操作,元素处理程序在匹配合适的匹配项时,使用正确的文件数值替换内容。
我选择替换XML::Twig
和address/id
的已定义内容,而不仅仅是直接搜索和替换,因为那样......你不必担心约count
显示内容中的任何其他位置。 (就像地址一样)。
答案 1 :(得分:2)
在解密您的问题之后,我发现您想要将xml文件中的实际内容,即id或其他节点的文本更改为文件名,因此请使用xml解析器,如lxml
from glob import iglob
import lxml.etree as et
for fle in iglob("[0-9][0-9][0-9][0-9].xml"):
tree = et.parse(fle)
id_ = tree.find(".//id").text = fle
tree.write(fle, encoding="utf-8")
如果您想更改计数,请使用:
for fle in iglob("[0-9][0-9][0-9][0-9].xml"):
tree = et.parse(fle)
id_, count = tree.find(".//id"), tree.find(".//count")
id_.text = count.text = fle
tree.write(fle, encoding="utf-8")
无论要将哪个文本设置为文件名,只需查找包含find的节点并使用 node.text = ... 逻辑设置文本。如果你想使用忽略扩展的名称,只需拆分:
for fle in iglob("[0-9][0-9][0-9][0-9].xml"):
tree = et.parse(fle)
id_, count = tree.find(".//id"), tree.find(".//count")
id_.text = count.text = fle.split(".")[0]
tree.write(fle, encoding="utf-8")
答案 2 :(得分:1)
在循环中尝试sed命令 -
for i in {1000..1500} #or whatever your maximum number is
do
sed -i "s/1000/"$i"/g" "$i".xml
done