PHPによるXML作成方法とは?

このQ&Aのポイント
  • PHPを使用してXMLファイルの作成方法について教えてください。
  • XMLファイルの特定の箇所に後から追記する方法についても知りたいです。
  • また、XML操作ができなければファイル操作でもかまいません。
回答を見る
  • ベストアンサー

PHPによるXML作成について

PHPによるXML作成について いつもお世話になっております。 XMLファイルの署名の作成を行っております。 A.xmlというXMLファイルに後で作成した部分をまとめて追記したいと思っています。 「まとめて」というのは、後で追記する部分をプログラム上で一つの変数に格納して、その変数に格納した内容(複数行)を指定した場所に書き込むということです。 XMLの操作として、PHPにこういう機能が無いのであればファイル操作としてでもかまいません。 何かうまく行く方法はありませんでしょうか? よろしくお願いいたします。 実際の例は以下のような感じです。 【A.xmlの例】 <?xml version="1.0" encoding="UTF-8"?> <?xml-stylesheet href="00001.xsl" type="text/xsl"?> <DataRoot> <A>999000000000000009</A> <B>0001</B> <STYLESHEET>999000000000000009.xsl</STYLESHEET> <C ID="CCCCCC"> <D> <E> <E1>100495</E1> <E2>4950000020161F01</E2> </E> <F>ファイル名称</F> </D> </C> ******** ここの一括で作成した部分を追記したい ******** </DataRoot> 【追記情報 この部分を変数に格納しています。】 <G xmlns = "http://www.xxxxxxxxx" id = "2009010101"> <Hinfo> <I> <I1></I1> <I2></I2> </I> </Hinfo> </G> 【結果のA.xml】 <?xml version="1.0" encoding="UTF-8"?> <?xml-stylesheet href="00001.xsl" type="text/xsl"?> <DataRoot> <A>999000000000000009</A> <B>0001</B> <STYLESHEET>999000000000000009.xsl</STYLESHEET> <C ID="CCCCCC"> <D> <E> <E1>100495</E1> <E2>4950000020161F01</E2> </E> <F>ファイル名称</F> </D> </C> <G xmlns = "http://www.xxxxxxxxx" id = "2009010101"> <Hinfo> <I> <I1></I1> <I2></I2> </I> </Hinfo> </G> </DataRoot>

  • PHP
  • 回答数1
  • ありがとう数8

質問者が選んだベストアンサー

  • ベストアンサー
noname#243182
noname#243182
回答No.1

設定で無効とされていない限り、最新バージョンの PHP では DOM API を使用した XML ドキュメントの操作が出来ます。 簡単な処理であれば、SimpleXML を利用されるのがよいでしょう。

参考URL:
http://jp2.php.net/manual/ja/refs.xml.php

関連するQ&A

  • XSLTでの外部XMLファイルの読み込みについて。

    XSLTについて質問がございます。 下記のように、document関数を用いて外部のxmlを取り込んでいるのですが、 もし、そのxmlファイルが存在しなかった場合はエラーとなってしまいます。 この時、対象のxmlファイルが存在するか否かを、XSLTで調べる事は可能なのでしょうか? boolean関数を用いてみたりしたのですが、ファイルがない場合はやっぱりエラーになってしまいます。 どなたかご教授願います。 <!-- STYLESHEET --> <?xml version="1.0" encoding="UTF-8"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:import href="xsl1.xsl"/> <xsl:param name="doc" select="document('../XML/import.xml')"/> </xsl:stylesheet>

    • ベストアンサー
    • XML
  • xmlから別ディレクトリのxslファイルの参照

    xml初心者です。 xmlファイルのひとつ上の階層にxslファイルを置いてあります。 xslファイル <?xml version="1.0" encoding="utf-8"?> <?xml-stylesheet type="text/xsl" href="../format.xsl"?> ... xslファイル format.xsl <?xml version="1.0" encoding="UTF-8"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> ... href="../format.xsl" のように指定したのですがxslが適用されません。 そもそも別ディレクトリへの参照は可能なのでしょうか。 もし可能ならばどのような方法があるのでしょうか。

    • ベストアンサー
    • XML
  • PHP5 XML クエリ 

    PHP5でXMLのテストをしているのですが、わからないことがあります。 --- test.xml <A> <B> <C>TEST</C> <D> <E>1</E> <F>2</F> <G>3</G> </D> </B> </A> <?php $doc = new DOMDocument; $doc->preserveWhiteSpace = false; $doc->Load('test.xml'); $xpath = new DOMXPath($doc); $query = '//A/B/D/E'; $entries = $xpath->query($query); foreach ($entries as $entry) { echo "$entry->nodeValue\n"; } で1が返されますが、 $query = '//A/B/D/E'; で、Eのノードを決め打ちしているので、foreachで回すのが気に入らないのですが この方法が一般的でしょうか? $e = なんとか??; で$entries = $xpath->query($query); のあと、取得できないでしょうか? あと、クエリという使い方で例えば2以上データを取得する この場合はF,Gの要素を取得するクエリの記述方法が知りたいです。

    • ベストアンサー
    • PHP
  • XMLの実体参照とXSLT

    次のようなXMLファイルをXSLTで処理したいのですが、&baseの部分がうまく表示できません。 どのようにしたら表示できるでしょうか? ■a.xml <?xml version="1.0" encoding="UTF-8"?> <?xml-stylesheet type="text/xsl" href="a.xsl"?> <!DOCTYPE test [ <!ELEMENT name (#PCDATA)> <!ENTITY base SYSTEM "base.xml"> ]> <test> <name>abc</name> &base; </test> ■base.xml <?xml version="1.0" encoding="UTF-8"?> <base>base</base> ■a.xsl <?xml version="1.0" encoding="UTF-8"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:output method="xml" encoding="UTF-8" /> <xsl:template match="/"> <xsl:apply-templates select="test" /> <xsl:apply-templates select="base" /> </xsl:template> <xsl:template match="test"> name:<xsl:value-of select="name" /> </xsl:template> <xsl:template match="base"> base:<xsl:value-of select="base" /> </xsl:template> </xsl:stylesheet> □結果 name:abc ※base.xmlの内容を表示できない

    • ベストアンサー
    • XML
  • 多次元配列からxmlツリーを作成したい

    はじめて投稿させていただきます。 DBに登録されているツリーテーブルを配列に取り込み、 xmlのツリーにしてファイルに保存したいと考えております。 DBのデータは以下のようになっております。 id cid att name 0 -1 D a 1 0 F b 2 0 F c 中略 33 -1 D d 34 33 D e 35 34 F f 36 34 F g 中略 262 -1 D h 263 262 D i 264 263 F j id:インデックス cid:子番号(idに同じ番号を持つものを親とする)(-1は最上階層の親) att:DはディレクトリFは末端 name:表示する名前 これを展開しながらxmlタグを挿入していきたいのですが nameを出力するタイミングでタグを挿入しようとすると末端のものしか 開始・終了タグで挟むことができません。 入れ子になっている場合の親の終了タグは全ての子供が終わった後に、階層の深さの数だけを最後に足してやりたいのです。 不規則な配列なのでforeachでするくらいしかわからず、 やってみたのですがatt=="D"なら再帰処理で繰り返し、 Dでなくなったら末端を書くくらいの事しかできず、 終了タグをどういった処理で入れたらよいかわかりません。 800文字制限に引っかかってしまい実際の配列の形はのせれませんでした。。 分割投稿も禁止のようで。。 各要素を持つ末端配列はわかりやすいように、仮に一つであっても次元を一つ下げて0番目の配列に格納しております。 もしかしたら配列への格納方法もよくないのかもしれません。。 ・後々扱いやすいような配列への格納の仕方 ・配列を展開しながらのタグの挿入方法 をどなたか良い案がありましたら宜しくお願い致します。

    • ベストアンサー
    • PHP
  • XSLTでの複数のXML検索結果を統合するには?

    初歩的な質問でごめんなさい。 XSLTを使って複数のXMLを検索した結果を、表示したいのですが、結果を1つのテーブルに統合するにはどうすればいいのでしょう。 次のスクリプトを基に作りたいのですが。 function search (keyword) { node = thexsl.XMLDocument.selectSingleNode("//xsl:for-each"); if(keyword) node.setAttribute("select", "//data[contains(word, '" + keyword + "')]"); else node.setAttribute("select", "//data"); str = thexml.XMLDocument.transformNode(thexsl.XMLDocument); view1.innerHTML = str; } 次のファイルを利用して検索したいです、 <xml id="thexml1" src="db1.xml"></xml> <xml id="thexml2" src="db2.xml"></xml> <xml id="thexml3" src="db3.xml"></xml> <xml id="thexsl" src="db.xsl"></xml> xmlファイルの内容 <?xml version="1.0" encoding="utf-8" ?> <dataroot xml:lang="ja"> <data>・・・</data>  ・・・ </dataroot> xslファイルの内容 <?xml version="1.0" encoding="utf-8" ?> <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"> <xsl:template match="/"> <table> <tr>・・・</tr> <xsl:for-each select="//data"> <tr>・・・</tr> </xsl:for-each> </table> </xsl:template> </xsl:stylesheet> よろしくお願いします。

    • 締切済み
    • XML
  • XMLからXML

    こんにちわ。 以下のやり方がわからなく、困っています。 XSLTを使って以下のようなXML→XMLを行いたいのですが。 変更前: <a> <b> <c>abc</c> <d>def</d> </b> </a> 変更後: <b> <c>abc</c> <d>def</d> </b> ようするに、指定したタグ以下のXML構造をそのまま取り出したいのです。 <xsl:template match="/a"> <xsl:apply-templates select="b"/> </xsl:template> だと中身のabc defしか取れません。 <c>とか<d>は、時によって変わる場合、どのようなXSLT を書けばよいのでしょうか? 申し訳ありませんが、わかる方がいれば教えてください。

    • 締切済み
    • XML
  • VBAからxml・スタイルシートを作成すると、一度保存しないと正常に動作しない

    お世話になります。 現在エクセルのVBAで(1)のようなソースで(2)を書き出しています。 (2)の「<?xml version="1.0" encoding="UTF-8"?><xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 」もVBAで「indate=<?xml version="1.0" encoding="UTF-8"?xsl:stylesheet version="1.0" lns:xsl="http://www.w3.org/1999/XSL/Transform">」とそのまま打ち込んでいます。 スタイルシートを使用して返還しようとすると、「パラメータが違う」旨メッセージがでてきて、(2)を一度開き、何も変更しないで保存すると正常にスタイルシートの変換処理が行われます。 (2)のVBAで書き出したxmlがUTF-8で保存されていないように感じるのですが、どのように変更すればUTF-8で書き出せるのでしょうか? 以上お手数ですが、よろしくお願いします。 (1) Const ForReading = 1, ForWriting = 2, ForAppending = 3 Const TristateUseDefault = -2, TristateTrue = -1, TristateFalse = 0 Dim fs, f, ts Set fs = CreateObject("Scripting.FileSystemObject") fs.CreateTextFile "F:\EXCEL→XML\問題形式" & Worksheets("設問形式設定シート").Range(設問形式設定シート大問列 & 設問形式設定シート行).Value & ".xsl" 'ファイルの作成 Set f = fs.GetFile("F:\EXCEL→XML\問題形式" & Worksheets("設問形式設定シート").Range(設問形式設定シート大問列 & 設問形式設定シート行).Value & ".xsl") Set ts = f.OpenAsTextStream(ForWriting, TristateTrue) ts.Write indate ts.Close (2) <?xml version="1.0" encoding="UTF-8"?><xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:import href="設定.xsl" /> <xsl:output method="xml" encoding="UTF-8" indent="yes" /> <xsl:param name="形式番号" >10001</xsl:param> <xsl:template match="/"> <xsl:call-template name="問題形式" /> </xsl:template> xsl:stylesheet>

  • amazonWebサービスからのxmlの加工について

    amazonWebサービスから取得したxmlをxslによって加工して表示しようとしています。 xsltはちゃんと表示されるのですが、xslからリンクしたcssが適用されません。 記述の仕方が悪いのかと思い、参考に http://xml-jp.amznxslt.com/onca/xml3?dev-t=D2JW5SAFEH7L0B&t=goodpic-22&f=http%3A%2F%2Fwww.goodpic.com%2Fmt%2Faws-list.xsl&KeywordSearch=%25e3%2582%25b5%25e3%2583%25bc%25e3%2583%2595%25e3%2582%25a3%25e3%2583%25b3&page=1&locale=jp&type=heavy&searchWord=&sort=&mode=books-jp こちらのxsl、cssを保存して表示させようとしたのですが、ローカルの時は表示されるのに、レンタルのサーバーにアップロード(あくまで参考のためで……)してから、そのxslを使ってWebサービスからxmlを表示させてみるとやはりcssが適用されません。 文字コードなども触ってみたのですが、一向に改善されませんでした。 他にこの手の質問がないようなので、もしかすると私のPC環境が影響しているのでしょうか。

    • ベストアンサー
    • XML
  • XMLの名前空間をXSLから指定する方法

    XML勉強してみて間もない者の質問です・・よろしくです。 XMLで例えば <oyaji:samp xmlns:oyaji="http://sampsampsamp.co.jp"> </oyaji:samp> と宣言したとすると、XSLスタイルシートファイルではどのように oyaji:samp を識別すればいいのでしょうか。 上記で質問内容の分からなかった方のみ以下読んでください・・ 例えば //templating.xsl <?XML宣言?> <xsl:stylesheet xmlns:xsl="スタイルシートURI"> <xsl:template match="/"> <xsl:apply-templates /> </xsl:template> <xsl:template macth="samp"> </xsl:template> </xsl:stylesheet> とあったとすると、sampにはマッチしませんよね。 それをマッチさせる方法を教えてください。

    • ベストアンサー
    • XML

専門家に質問してみよう