前提:我来自 C++,我对 Perl 很陌生。我正在尝试向给定.xml
文件添加样式表声明。该.xml
文件由第三方创建并下载到一边;我们不是在质疑 XML 的正确性或格式良好。我们也不知道文件中的 XML 是缩进的还是单行的。
无法仅使用 Perl 巧妙地操作文件,我使用了 XML::LibXML,但我仍然卡住了。这是到目前为止我所做的。
#!/usr/bin/perl
use strict;
use warnings;
use XML::LibXML;
my $path = './file.xml';
my $fxml = XML::LibXML::Document->new('1.0','utf-8');
my $pi = $fxml->createPI("xml-stylesheet");
$pi->setData(type=>'text/xsl', href=>'trasf.xsl');
$fxml->appendChild($pi);
$XML::LibXML::skipXMLDeclaration = 1;
my $docwodecl = XML::LibXML::Document->new;
$docwodecl = $doc->toString;
open my $out_fh, '>', $path;
print {$out_fh} $final_xml.$docwodecl;
close $out_fh;
有了这个,我只得到没有初始声明的 XML,<?xml version="1.0" encoding="ISO-8859-1"?>
并且 utf-8 字符都搞砸了。我试过用这样的东西
$fxml->setDocumentElement($doc);
$fxml->toFile($path);
但它不起作用。我可以使用一些方法来实现我的(毕竟很简单)目标?我查看了文档,但找不到任何有用的东西。
编辑
样式表声明必须<?xml version="1.0" encoding="UTF-8"?>
在实际 XML 之后和之前。