【问题标题】:getValue from an XML having same attributes using Perl XMLDOM parser使用 Perl XMLDOM 解析器从具有相同属性的 XML 中获取值
【发布时间】:2015-05-11 16:04:57
【问题描述】:

我正在尝试从下面的 XML 中获取“TaxAmount”的值,该 XML 在不同的地方包含相同的标签名称。

从下面的 XML 中,我想在标签 'Order' 下将 'TaxAmount' 的值设为 '7.2',但我总是在标签 'OrderItemList 中的标签 'OrderItem' 下将 'TaxAmount' 设为 '1.2' '。

谁能帮我将“TaxAmount”的值设为“7.2”?

我从其他类似的问题中尝试了很多东西,但没有成功。

<Order>
  <CustomerID />
  <IsCustomerCompany>false</IsCustomerCompany>
  <OrderTimezone />
  <OrderDescription />
  <OrderItemList>
    <OrderItem>
      <OrderItemID>1234</OrderItemID>
      <ItemCode />     
      <TaxAmount>6.0</TaxAmount>
    </OrderItem>
    <OrderItem>
      <OrderItemID>1245</OrderItemID>
      <ItemCode />
      <TaxAmount>1.2</TaxAmount>
    </OrderItem>
  </OrderItemList>
  <Currency>USD</Currency>
  <Amount>120</Amount>
  <TaxAmount>7.2</TaxAmount>
</Order>

我正在使用的代码是,

use XML::DOM;

$xml = XML::DOM::Parser->new->parse( $self->fullresponse )->getDocumentElement;
my $order_tag = $xml->tag('Order');
my $tax_amount =  $order_tag->getValue('TaxAmount');

感谢任何帮助。

【问题讨论】:

  • 对不起,它的拼写错误。修改了我的问题。
  • 您需要显示您需要帮助的代码
  • 我正在尝试,我的 $tax_amount = $order_tag->getValue('TaxAmount');,其中 $order_tag 是 $xml->tag(''Order'');但我仍然获得“1.2”的价值。
  • 在上下文中显示您的代码。您还没有解释您正在使用的模块以及许多其他内容
  • 我不确定代码是否真的有效:Can't locate object method "tag" via package "XML::DOM::Element" 。请问你能用一个工作示例更新它吗?

标签: xml perl xml-parsing perl-module perl-data-structures


【解决方案1】:

无法具体说明您正在使用的模块,但这可以解决问题:

#!/usr/bin/perl

use strict;
use warnings;

use XML::Twig;

my $twig = XML::Twig -> new (  ) -> parse ( 'your_xml_file' );
print $twig -> root -> get_xpath ( "./TaxAmount",0 ) -> text;

请注意,在此示例中,您的“根”节点是 Order,因此在其下方寻找 Order 可能是您的绊脚石。

【讨论】:

  • 我无法在我们的代码中更改/包含任何其他新的 CPAN 模块,因为我们的客户遵循严格的代码审查。你能帮我处理一下 XML::DOM 解析器吗?
  • 否 - 您没有在问题中提供足够的信息来执行此操作。您提供的代码甚至没有运行。
猜你喜欢
  • 1970-01-01
  • 2015-05-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-11-27
相关资源
最近更新 更多