【问题标题】:i want to read a xml file, but it contains a '-' before the <我想读取一个 xml 文件,但它在 < 之前包含一个“-”
【发布时间】:2019-11-27 10:39:32
【问题描述】:

去掉 - 使其可以被读取为 xml

解决方案:

# read XML file
my $filename = 'Finesse.txt';
open $FILE, '<', $filename or die "Can't open file $!";
my $document = do { local $/; <$FILE> };
$document =~ s/^[\- ] //mg; 

my $dom = XML::LibXML->load_xml(string => $document);

say "Users in READY mode:";
say " ";
$teller = 0;

foreach my $title ($dom->findnodes('Team/users/User')) {
$status = $title->findvalue('./state');
if ($status eq "READY") {
    say 'Naam  : ', $title->findvalue('./firstName');
    $teller++;
    }
}
say "Total = ", $teller;

以下文件是根据网站的输出创建的

技巧.txt

- <Team>
  <id>8</id> 
  <name>OurSupport</name> 
  <uri>/finesse/api/Team/8</uri> 
- <users>
- <User>
  <dialogs>/finesse/api/User/C.person/Dialogs</dialogs> 
  <extension /> 
  <firstName>Caz</firstName> 
  <lastName>Person</lastName> 
  <loginId>C.Person</loginId> 
  <pendingState /> 
  <state>ACTIVE</state> 
  <stateChangeTime>2019-07-15T19:54:40.846Z</stateChangeTime> 
  <uri>/finesse/api/User/C.Person</uri> 
  </User>
  </users>
  </Team>

感谢您提供解决方案的提示。

【问题讨论】:

  • 您要问的实际问题是什么:如何删除“-”或如何在 perl 中解析 XML?尝试将每个帖子限制为一个问题。
  • 建议不要使用XML::Simple,请考虑使用e.g. XML::LibXML 代替。请更清楚地解释finesse.txt中的-标志的用途是什么?
  • 为什么预期的输出是C.Person : Active?文件中也没有READY 字符串,这是什么意思?
  • finesse.txt 中的 - 标志是由网页产生的,我无法更改该输出,所以我必须处理它。你是对的,READY 应该是 ACTIVE
  • 我认为这是从 Firefox 默认 XML 样式复制/粘贴。只需保存浏览器文档,就不会在其中包含 +/- 折叠标记。

标签: xml file perl


【解决方案1】:

这不是一个有效的 XML 文件。你需要修复它。幸运的是,这很容易做到。

$xml =~ s/^[\- ] //mg;

顺便说一句,您正在使用一个模块,它自己的文档建议不要使用它。尽管它的名字,XML::Simple 是the most complicated XML parser to use。请使用其他内容,例如 XML::LibXML。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-12-17
    • 2022-11-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-14
    • 2022-10-15
    相关资源
    最近更新 更多