我正在编写XML解析器,并且处理链接的程序有问题。我正在尝试解析XML层次结构设置/设置,然后解析findnode'Value'。以下是XML的示例
<?xml version='1.0' ?>
<Settings xmlns='http://hme.com/Settings.xsd'>
<Setting SID="0">
<Name>Store ID</Name>
<Value>72</Value>
</Setting>
<Setting SID="1">
<Name>Deprecated</Name>
<Value>0</Value>
</Setting>
<Setting SID="8">
<Name>Open Store Hours Sunday</Name>
<Value>25200</Value>
</Setting>
这是我用来解析XML的代码
my $doc = $parser->parse_file($settings_file) or die "Couldn't parse timer settings\n";
#Sunday
for my $reviewer ($doc->findnodes('/Settings/Setting[@SID="8"]')) {
my ($name) = $reviewer->findnodes('Value');
$name->removeChildNodes();
$name->appendText('109800');
}
当我从XML文件中删除xmlns ='http://hme.com/Settings.xsd'时,替换值节点没有问题。一旦在XML中输入了链接,代码将停止工作,并且不会更新xml工作表。有没有办法处理此链接或删除它,以便我可以正确地更新文件?
您要求查找名称空间为空且名称为Settings
的节点。文档中没有此类节点,因此findnodes
正确不返回任何内容。
您想找到名称空间为http://hme.com/Settings.xsd
且名称为Settings
的节点。您可以使用以下方法实现这一目标:
my $xpc = XML::LibXML::XPathContext->new();
$xpc->registerNs( s => 'http://hme.com/Settings.xsd' );
for ($doc->findnodes('/s:Settings/s:Setting[@SID="8"]')) {
...
}