【问题标题】:Can you save to disk using XPath's setNodeText function?可以使用 XPath 的 setNodeText 函数保存到磁盘吗?
【发布时间】:2020-01-24 18:35:37
【问题描述】:

我正在使用“学校/学生[4]”之类的 XPath。 setNodeText 函数可以保存到硬盘吗?我的更改似乎只在内存中进行。

【问题讨论】:

  • 您使用哪个模块进行 xpath 查询?
  • @Schwern 我正在使用 XML::XPath
  • XML::XPath 已经有 10 年没有被触及了,而且它似乎没有记录在案的方式来转储整个 XML 结构。我建议使用此处讨论的更好维护的 XML 模块:stackoverflow.com/questions/5275610/…
  • 我同意@Shwern...不要使用 XML::XPath
  • @Schwern 谢谢,有没有办法使用 XPath 例如(“school/student[4]”)来遍历其他模块中的 xml 树,我不想重写所有内容

标签: perl xpath


【解决方案1】:

如果我理解正确,您正在尝试更改文档然后将其写入磁盘。

use XML::LibXML qw( );

my $parser = XML::LibXML->new();
my $doc    = $parser->parse_fh(...);
my $root   = $doc->documentElement();

for my $node ($root->findnodes('//school/student[4]')) {
   $node->removeChildNodes();
   $node->appendText("New text");
}

open(my $fh, '>:raw', ...) or die $!;
print($fh $doc->toString());

【讨论】:

    【解决方案2】:

    您可以使用未记录的方法getNodeAsXML 转储 XML 结构。不保证输出是有效的 XML(例如,没有标头),但它通常可以解决问题。

    my $str = $xp->getNodeAsXML();
    print $str;
    

    来源:http://www.perlmonks.org/?node_id=567212

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-02-26
      • 2021-11-12
      • 1970-01-01
      • 1970-01-01
      • 2010-11-21
      • 1970-01-01
      相关资源
      最近更新 更多