DOM で XML 文書を結合する例を探していたら、下記のものが見つかりました。

http://www.atmarkit.co.jp/fxml/askxmlexpert/020m …

これを参考に、PHP5 でテストするために、下記のスクリプトを作成しました。

<?php
$r1 = new DomDocument;
$r1->loadXML("<Items><Item>a</Item></Items>");
$r1rt = $r1->documentElement;

$r2 = new DomDocument;
$r2->loadXML("<Item>b</Item>");
$r2rt = $r2->documentElement;

$r1rt->insertBefore($r2rt,null);

$r1->encoding = "utf-8";
print $r1->saveXML();
?>


このスクリプトを実行すると、insertBefore のところで例外が発生しエラーになってしまいます。何が悪いのでしょうか?

最終的にやりたいのは XML 文書を結合するということなので、DOM にはこだわりません。何か良い方法があれば、お知恵をお貸し下さい。

このQ&Aに関連する最新のQ&A

A 回答 (1件)

# ソースにコメントをつけて回答します。



$r1 = new DomDocument;
$r1->loadXML("<Items><Item>a</Item></Items>");
$r1rt = $r1->documentElement;

$r2 = new DomDocument;
$r2->loadXML("<Item>b</Item>");
$r2rt = $r2->documentElement;

# 違うXMLドキュメントからコピーする場合はちゃんと
# importNodeを行いましょう。
$r2rt_copy = $r1->importNode($r2rt, true);

# 最後に付け加えるならappendChildを用いたほうがいいと思います。
$r1rt->appendChild($r2rt_copy);

$r1->encoding = "utf-8";
print $r1->saveXML();

# PHPの経験は少ないので記述ミスがあると思います。
# そこは直してください(*^^*)
    • good
    • 0

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Q「古い圧縮ファイル」の確認方法

Dドライブのディスクのクリーンアップをしたいのですが、実行できるものが、「古い圧縮ファイル」の削除しかありません。

「古い圧縮ファイル」がどのプログラムかを確認する方法を教えてください。

また、圧縮されたファイルの名前は青くなるらしいのですが、見つかりません。どうしてでしょうか
圧縮ファイルは1G弱あります。

Aベストアンサー

http://www.atmarkit.co.jp/fwin2k/win2ktips/106cleanup/106cleanup.html

初期設定では、50日以上アクセスの無かったファイルに対して、圧縮が行われます。
当然、圧縮してからでないと、ファイル名は青色にはなりませんので、ディスク・クリーンアップでの候補段階では、黒色のままです。


尚、設定によっては青色表示にならない場合も有りますけど。

http://121ware.com/qasearch/1007/app/nec.jsp?005084

Q

の使い方

xhtml+cssをやり始めです。

実は、<br />と<p></p>の使い方についてわかんなくて教えてくださーい。

普通のhtmlでは改行したいときは、<br />を入れまくっていましたが、xhtmlは<br/>ではなく改行は<p></p>でといわれました。

<p>あいうえお</p>
<p>かきくけこ</p>

といれると改行にはなりますが、1行あけたい場合はどうしますか?

<p>あいうえお</p>
<p></p>
<p>かきくけこ</p>

としても1行あきませんよね?
こういう場合は

<p>あいうえお</p>
<br />
<p>かきくけこ</p>

でいいのですかね???

単純な質問ですみません。

Aベストアンサー

基本的に、<p>タグで段落を作るときに、勝手に一行開けてくれると考えていいかと思います。
そして、<br>は行をあけない普通の改行ということになります。

つまり、一行あけるときは
<p>あいうえお</p>
<p>かきくけこ</p>

行をあけないときは
<p>あいうえお<br />
かきくけこ</p>
となります。

*余談ながら、xhtmlでは<body>の直下に普通のテキストを書くことができませんので、文章を書くときはそれを<p>で囲ってやることが必要となります。

Qファイルの圧縮方法

AVIやMPGの画像ファイルを圧縮する方法を教えてください。900mb位のファイルをCD-Rに落とし込める700mbまで圧縮したいんですが。できれば、zipやlzhなどの後で解凍しなくてはいけないような圧縮方法ではなく、多少画像が荒くなってもファイルを単純に縮小させるような方法を教えていただけると有り難いのですが。。
因みに、TMPGEncを試してみたんですが、どうもうまくいかなくて。。ファイルサイズが元のファイルより逆に大きくなってしまうんです。
すいませんが、宜しくお願いします。

Aベストアンサー

画像圧縮?くす(^^
エンコはTMPGEncやaviutlでやるのがふつーです。
ええ 絶対! 
aviutl
http://ruriruri.zone.ne.jp/aviutl/

zipとかで圧縮しても意味ありません サイズ的に。

で、TMPGEncで元より大きくなるのは問題は
コーデック、画像サイズ、 音声ファイルなど
理由はいっぱいあります。対処は類似質問みて↓
http://oshiete1.goo.ne.jp/kotaeru.php3?q=625581

だから圧縮というか再エンコードが面倒なら
ファイルをテキトーな部分でカットする方向性はどお?
CD-R 2枚に保存 450 450 くらいでカット。
対処は類似質問みて↓
http://oshiete1.goo.ne.jp/kotaeru.php3?q=610331
ではでは!

追伸
カンタンにならrmファイルに変更かなあ
でも画質は落ちますよ
ネット配信 ストリーミング形式でどぞ!
RealplusG2とかRealEncoderで変換
でもaviでもないしmpegでもないですけど、どお?

参考URL:http://oshiete1.goo.ne.jp/kotaeru.php3?q=610331

画像圧縮?くす(^^
エンコはTMPGEncやaviutlでやるのがふつーです。
ええ 絶対! 
aviutl
http://ruriruri.zone.ne.jp/aviutl/

zipとかで圧縮しても意味ありません サイズ的に。

で、TMPGEncで元より大きくなるのは問題は
コーデック、画像サイズ、 音声ファイルなど
理由はいっぱいあります。対処は類似質問みて↓
http://oshiete1.goo.ne.jp/kotaeru.php3?q=625581

だから圧縮というか再エンコードが面倒なら
ファイルをテキトーな部分でカットする方向性はどお?
CD-R 2枚に保存 450...続きを読む

Qタグ?

あるxmlのソースに
<intervalTime>や、<eventList>といったタグが書かれていました。

これは何のタグですか?
何かユーザー定義のものでしょうか。
リファレンス等で調べても出てきませんでした。

ご存知の方がいらっしゃいましたら教えてください。
よろしくお願いいたします。

Aベストアンサー

XMLはマークアップ言語ですから、お好きなタグを・・
<doc>
 <situmon>
  <danraku>
   これは何のタグですか?
  </danraku>
  <danraku>
   何かユーザー定義のものでしょうか。リファレンス等で調べても出てきませんでした。
  </danraku>
 </situmon>
・・・とか・・御随意に・・
たのしいXML: XML/XHTML入門ページです( http://www6.airnet.ne.jp/manyo/xml/index.html )
 このあたりとか読むと良いでしょう。

Qファイルの圧縮方法が解りません

窓の杜やベクター等に置かれている、フリーの圧縮、解凍ソフトをダウンロードしていますが、テキストファイルや、画像ファイルの圧縮方法が解りません。何方か教えて頂けませんか?

Aベストアンサー

ソフトの開発者のサイトで質問することをお奨めします。

ソフトごとに操作方法が異なりますので、使用しているソフト名すらない状態では誰も必要とする回答を出せません。

窓の杜やベクターでは開発者のサイトへのリンクがありますから、そこからアクセスできますよ。

QRSS1.0のitemとlinkの関係

さきほどから、自分のサイトの更新情報を載せるべく、RSSファイルを作ろうと考えていました。
Headline-Editor Liteというのソフトを使って作ってみました。
http://www.infomaker.jp/editorlite/
更新情報としては、その内容を載せるつもりなのですが、
アドレスはトップページで固定しようと考えていました。
このソフトで、RSSファイルを作成すると、
itemタグのrdf:about属性に、「指定アドレス+#he日付」という値をいれ、
itemタグ内のlinkタグに、「指定アドレス」を入れて、RSSファイルを生成します。
こうして生成したRSSファイルをサーバーにあげて、
Headline-Readerで確認すると、当たり前ですが、正常に取得できます。
http://www.infomaker.jp/headline/

ところが、goo RSSリーダーでは、最新の1itemしか取得できません。
http://reader.goo.ne.jp/

RSS1.0の仕様によると、itemタグのrdf:about属性の値は、一意でないといけないようです。
http://www.net.intap.or.jp/INTAP/s-web/data/TR/1-2.html#s5.5
しかし、その値は、linkタグ内の値と一致していなくてもよいようです。
(文章を読むと、一致させることが推奨されているようですが)

RSSファイルをいじって調べてみたところ、
goo RSSリーダーでは、itemタグのrdf:about属性の値に関わらず、
linkタグ内の値が同一のものは、同一のitemとして扱う仕様になっているようです。

このgoo RSSリーダーの仕様は、RSS1.0の仕様に基づいたものとは思えませんが、
やはりgoo RSSリーダーの独自仕様なのでしょうか?
ご存知の方がいらっしゃいましたら、教えてくださいm(_ _)m

さきほどから、自分のサイトの更新情報を載せるべく、RSSファイルを作ろうと考えていました。
Headline-Editor Liteというのソフトを使って作ってみました。
http://www.infomaker.jp/editorlite/
更新情報としては、その内容を載せるつもりなのですが、
アドレスはトップページで固定しようと考えていました。
このソフトで、RSSファイルを作成すると、
itemタグのrdf:about属性に、「指定アドレス+#he日付」という値をいれ、
itemタグ内のlinkタグに、「指定アドレス」を入れて、RSSファイルを生成しま...続きを読む

Aベストアンサー

> このgoo RSSリーダーの仕様は、RSS1.0の仕様に基づいたものとは思えませんが、
RSS 1.0の仕様は、データのフォーマットの仕様であって、データの管理方法や、データの表示方法を定めた仕様ではありません。
ですので、goo RSSリーダーが1itemしか表示しないという動作とRSS 1.0の仕様は無関係です。
また、ユーザの利便性を考えても、goo RSSリーダーの動作に何か問題があるとは思えません。むしろ、これはこれで使いやすい、と考えることもできます。

例えば、こんな考えです。
linkが示すURLが同じでしたら、それが示すコンテンツも同じと考えます。
同じコンテンツを示すitemが複数あるということは、どれか一つのitemが最新の正しい情報を示し、残りのitemは古い(そして既に正しくない)情報を示している、と考えたとします。
そうなると、最新と思われる情報を1つだけ表示し、残りの情報は表示しない、という動作は自然なように思えます。

というわけで、goo RSSリーダーに問題があるとは思えません。
今回の問題の根本はここです。
> 自分のサイトの更新情報を載せるべく、RSSファイルを作ろうと考えていました。
RSSは、サイトの更新情報を配布するための仕様ではありません。サイトの要約を配布するためのフォーマットです。
つまり本来の目的外のことに使用しようとしているわけです。無理がでるわけです。

サイトの更新情報ではなく、サイトの要約をHeadline-Editor LiteでRSSファイルとして作成し、それを配布することをお勧めします。
サイトを変更したときに、RSSファイルも変更後の内容に合わせて変えましょう。
大抵のRSSリーダーは、RSSファイルの変化を分かりやすくユーザに提示するようになっていますので、結果的にサイトが更新されたことがユーザに伝わるはずです。

> このgoo RSSリーダーの仕様は、RSS1.0の仕様に基づいたものとは思えませんが、
RSS 1.0の仕様は、データのフォーマットの仕様であって、データの管理方法や、データの表示方法を定めた仕様ではありません。
ですので、goo RSSリーダーが1itemしか表示しないという動作とRSS 1.0の仕様は無関係です。
また、ユーザの利便性を考えても、goo RSSリーダーの動作に何か問題があるとは思えません。むしろ、これはこれで使いやすい、と考えることもできます。

例えば、こんな考えです。
linkが示すURLが同じでし...続きを読む

Qpsdファイルの圧縮方法

psdファイルの圧縮方法を教えてください。(基本的質問で恐縮ですが)
win98です。なお、ファイルは9MB程度ですが、圧縮したものを解凍する際、鮮明度が落ちずに元通りの画像で開けますでしょうか?

Aベストアンサー

●大きなサイズのファイルを分割して送付

+Lhaca 1.20 デラックス版での分割方法
http://park8.wakwak.com/~app/Lhaca/

 1. インストールは、ダウンロードした Lhaca120.exe を実行する。
 2. デスクトップに作成された +Lhaca のショートカットに、
   対象のファイルをALTキーを押しながらドロップする。
 3. 保存場所を聞いてくるので、望みの場所を指定する。
   (圧縮形式は、相手が解凍できる形式を選ぶ。)
 4. 分割されたファイル群と結合用のバッチファイルが作成される。
   (デフォルトでは 1.2MB を上限として分割される。)
   (このサイズは +Lhaca で変更できる。)
 5. (4)のファイル全てを、容量を超えないようにメールに添付して送信
   する。
   (添付ファイル総数を本文に明記すること。)
 6. 受け取った側は、全ての添付ファイルを一箇所に集めて、バッチファ
   イルを実行する。
   (操作手順は、本文に明記すること。)
 7. 分割されたファイルが結合されるので、結合された圧縮ファイルを解
   凍する。
 8. 9MBのファイルが解凍されるので、作業する。


これでどうかな!?

※他の圧縮ソフトも分割機能が備わっていると思うが・・・

●大きなサイズのファイルを分割して送付

+Lhaca 1.20 デラックス版での分割方法
http://park8.wakwak.com/~app/Lhaca/

 1. インストールは、ダウンロードした Lhaca120.exe を実行する。
 2. デスクトップに作成された +Lhaca のショートカットに、
   対象のファイルをALTキーを押しながらドロップする。
 3. 保存場所を聞いてくるので、望みの場所を指定する。
   (圧縮形式は、相手が解凍できる形式を選ぶ。)
 4. 分割されたファイル群と結合用のバッチファイルが作成される。
   (...続きを読む

QTreeView と DOMツリー

C# WPF でプログラミングをしています。

TreeView に XML の階層構造を表示させて、ある項目を選択し、ボタンをクリックするとその項目の子ノードが追加されるようにするプログラムを作っています。

選択した項目(TreeView.SelectedItem(Object型)) を、DOMツリーの要素ノード (XmlElement型) にキャストし、それに新しく作った要素ノード(XmlElement型)をつなげるといったようにしているのですが、その際「挿入するノードは、異なるドキュメント コンテキストのものです。」のエラーが発生してしまいます。

XmlElement tvi = treeView.SelectedItem as XmlElement;
XmlElement item = doc.CreateElement("item");
tvi.PrependChild(item); // エラー発生箇所

※ doc は XmlDocument のインスタンスです。

解決策を教えてください。よろしくお願いします。

Aベストアンサー

TreeViewで試してないので自信なし。

例外出るの。
https://ideone.com/fQ04I
こうすると出ないの。
https://ideone.com/e3HEI

QNTFS圧縮したファイルを全部まとめて戻す方法

NTFS圧縮したファイルをプロパティからひとつひとつチェックをはずして戻すのではなく、圧縮されたファイルを全部まとめて元に戻す方法ってあるのでしょうか?

Aベストアンサー

圧縮を解除したいファイルを全て選択した状態で
→プロパティ→NTFS圧縮のチェックを外す→OK

それらのファイルがフォルダに入っているなら
フォルダのプロパティからやってもいい。
(サブフォルダにも適用するか尋ねられるからOKにする)

QSQLの<>の記述

XMLの文章内でSQL文を作成しています。

SQL否定文である <> をXML内に入れたいのですが
やり方がわかりません。

教えて下さい。

Aベストアンサー

エスケープしてください(実体参照といいます)

< = &lt;
> = &gt;

<hoge>xが3より大きいことをx &gt; 3とあらわします</hoge>

#CDATAマーク区間は好きじゃない


人気Q&Aランキング