1

xml ドキュメントに親を追加する際に問題があります。私はxmlを取得しました:

<book id="bk104">
  <author>Corets, Eva</author>
  <title>Oberon's Legacy</title>
  <genre>Fantasy</genre>
  <price>5.95</price>
  <publish_date>2001-03-10</publish_date>
  <description>In post-apocalypse England, the mysterious 
  agent known only as Oberon helps to create a new life 
  for the inhabitants of London. Sequel to Maeve 
  Ascendant.</description>
</book>

親タグを本に追加したいので、次のようになります。

<library>
 <book id="bk104">
  <author>Corets, Eva</author>
  <title>Oberon's Legacy</title>
  <genre>Fantasy</genre>
  <price>5.95</price>
  <publish_date>2001-03-10</publish_date>
  <description>In post-apocalypse England, the mysterious 
  agent known only as Oberon helps to create a new life 
  for the inhabitants of London. Sequel to Maeve 
  Ascendant.</description>
 </book>
</library>

を使用XML::LIBXMLしています。ルートを取得しようとしました

my $root = $doc->getDocumentElement;

新しい要素を作成します

my $new_element= $doc->createElement("library");

その後

$root->insertBefore($new_element,undef);

ついに :

my $root = $doc->getDocumentElement;
my $new_element= $doc->createElement("library");
$parent = $root->parentNode;
$root->insertBefore($new_element,$parent);

しかし、うまくいきません。また、ヘッダーノードを返すルートの親を見つけようとしましたaddchildが、どちらも機能しません。

4

2 に答える 2

0

この作品を試してください:

open my $in, '<:encoding(utf-8)', 'in.xml';
my $document = XML::LibXML->load_xml(IO => $in);

my $root     = $document->documentElement();
my $new_root = $document->createElement('library');
$new_root->appendChild($root);
$document->setDocumentElement($new_root);

open my $out, '>:encoding(utf-8)', 'out.xml';
print $out $document->toString();

new_root要素を作成し、ルート要素をnew_rootに子として追加し、 new_root要素をドキュメントのルート要素として設定します。

于 2013-03-12T11:35:09.160 に答える
0

新しい空のlibrary要素を作成し、それをドキュメントの新しいルート要素として設定する必要があります。次に、古いルートを新しい子として追加します。

use strict;
use warnings;

use XML::LibXML;

my $doc = XML::LibXML->load_xml(string => << '__END_XML__');
<book id="bk104">
  <author>Corets, Eva</author>
  <title>Oberon's Legacy</title>
  <genre>Fantasy</genre>
  <price>5.95</price>
  <publish_date>2001-03-10</publish_date>
  <description>In post-apocalypse England, the mysterious 
  agent known only as Oberon helps to create a new life 
  for the inhabitants of London. Sequel to Maeve 
  Ascendant.</description>
</book>
__END_XML__

my $book = $doc->documentElement;
my $library = $doc->createElement('library');
$doc->setDocumentElement($library);
$library->appendChild($book);

print $doc->toString(1);

出力

<?xml version="1.0"?>
<library>
  <book id="bk104">
    <author>Corets, Eva</author>
    <title>Oberon's Legacy</title>
    <genre>Fantasy</genre>
    <price>5.95</price>
    <publish_date>2001-03-10</publish_date>
    <description>In post-apocalypse England, the mysterious 
  agent known only as Oberon helps to create a new life 
  for the inhabitants of London. Sequel to Maeve 
  Ascendant.</description>
  </book>
</library>
于 2013-03-12T16:36:31.447 に答える