【发布时间】:2020-05-13 01:40:15
【问题描述】:
我正在编写 XML 解析器,但处理链接的程序有问题。我正在尝试解析 XML 层次结构设置/设置,然后查找节点“值”。以下是 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 表。有没有办法处理此链接或将其删除,以便我可以正确更新文件?
【问题讨论】:
-
您可能会发现我的教程中的“Working with namespaces”部分很有用。
-
查看您建议的页面,我相信我正在声明命名空间 correcr,但收到的是
XPath error: Undefined namespace prefix。我使用了 xpath 沙箱,并且能够加载我的 xml 并使用查询来查找节点,但是当我尝试在我的代码中没有运气时。这就是我声明命名空间my $xpc = XML::LibXML::XPathContext->new(); $xpc->registerNs('xsd', 'http://hme.com/Settings.xsd');的方式
标签: xml perl url xml-parsing xml-libxml