トップページtech
542コメント171KB

XMLプログラミング

■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさんNGNG
単におれが質問したいから立てたぞ!
0492デフォルトの名無しさんNGNG
.
0493デフォルトの名無しさんNGNG
>>492
冬眠?
0494デフォルトの名無しさんNGNG
初心者的なことかもしれないけれど、迷ったので質問させてください。

今、XMLで構築されたデータベース的な情報の中からXSLで情報を摘出するようなシステムを考えています。
具体的に言うと、日記を毎日XMLで書いて、ホームページの更新をXSLのみでやろう、というようなことです。
それ自体は特に問題なく出来そうなのですが、「日記を毎日書く」というのをどのように実装しようか
ちょっと迷っています。

エディタで書くのはあまり現実的な方法ではないので、何かしらのツールを書こうと思っていますが、
定型のXMLを毎回既存のXMLに追加していく場合、どのような方法で行うのが良いのでしょうか?
DOMモデルを固めうちでやってしまった場合、将来的に変更があった場合などに困りそうですし、
XML SchemaやRELAXERなどを使うのが正しいのか、いまいちよくわかりません。

簡単に「〜がいいよ」というのを教えてもらえませんか?よろしくお願いします
0495デフォルトの名無しさんNGNG
>>494

■XMLDB(e.g. Xindice)を使う
一番スマートと思える方法だが、XindiceはJava1.4と相性が悪くて僕は断念した。
リリースビルドも2年以上更新されてないし、半分止まったプロジェクトなのだろうと判断。
アップデートにはXUpdateを使う。

■普通のDBに入れる
一日ごとにDBのレコードにしちゃう。ロックも一日単位で行えるので、排他処理が確実。
ただ、XSL+XPathみたいなXMLバリバリな処理とは相性悪いよね。

■一つのファイルに入れちゃう
排他処理とか大変そう。
排他処理をファイルのロック等に頼らず、サーブレットのスレッド同期で行うので有れば、
更新等の処理を全部サーブレット側からのみ行うようにすれば、なんとかいけるような。
この場合、DOMツリーを常にメモリに保持して置いて、XMLのファイルはバックアップとして扱うことになるかと。

僕は当面最後のアプローチをとっておいて、使えそうなXMLDBが安く(あるいは無料で)
手にはいるようになったらそちらに移行しようかと考えてまつ。
そもそもXMLをストレージに使うのは云々、というツッコミ歓迎。
0496デフォルトの名無しさんNGNG
>>13
ワラタ
0497デフォルトの名無しさんNGNG
>>495
Xindice、そんな状況なのか…情報サンクスです。

ただ、DBを作るほどではなくて(というか権限が無くて出来ない)
本当に個人が日記を毎日更新するくらいの簡単な話です。

考えていたのは、1つのXMLファイルにデータを全部入れて、
更新があるたびに適当に書いたプログラムで(おそらくxerceを使って)
XSLをかけ、いくつかのHTMLを定期的に作成する、そういう流れを考えていました。

で、XMLファイルの定期的な更新が意外と面倒になりそうだったので、
これもプログラムで処理しようと思ったわけですが、DOMで書くのは
なんだかいまいち正しくないような気がして……。

でもDOMでいいかも、とか思い直してきました。
なにか他にいい方法があればぜひ教えてください
0498デフォルトの名無しさんNGNG
<?xml version="1.0" ?>
<htmldoc>
<![CDATA[ hoge<br>hogehoge ]]>
</htmldoc>

「hoge
 hogehoge」
と出力するxslはどう書けば良いのでしょうか。
何をどう書いても
「hoge<br>hogehoge」
と出力されてしまいます。
0499_NGNG
http://homepage.mac.com/hiroyuki44/hankaku08.html
0500デフォルトの名無しさんNGNG
★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★
☆★☆★☆★ 新商品 ゾク・ゾク 入荷 ☆★☆★☆
★☆                       
☆★ 送料激安!!  送料激安!!  送料激安!!
★☆      http://www.get-dvd.com      
☆★  激安アダルトDVDショップ        
★☆    お買い得!! 1枚500円〜 急げ!   
☆★    インターネット初!「きたぐに割引」  
★☆    北海道・東北の皆様は送料も激安!   
☆★      http://www.get-dvd.com      
★☆        スピード発送!        
☆★      http://www.get-dvd.com      
★☆        商品が豊富!         
☆★      http://www.get-dvd.com      
★☆                       
☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆
0501???NGNG
http://www.39001.com/cgi-bin/cpc/gateway.cgi?id=ookazujp
http://www.39001.com/cgi-bin/cpc/welcome.cgi?id=ookazujp

!!!!! ━━━━━━(゚∀゚)━━━━━━ キター!!!!!
0502デフォルトの名無しさんNGNG
>>498
xsl:value-ofでdisable-output-escapingをyes
0503デフォルトの名無しさんNGNG
すいません、他のXMLスレで質問したのですがスレ違いらしいので
ここで改めて質問させていただきたいのですが
XMLをHTMLに変換するXSLなのですが

<xsl:element name="a">
<xsl:attribute name="href">
          <xsl:value-of select="linkurl"/>
</xsl:attribute>
<xsl:value-of select="name"/>
</xsl:element>

HTMLの<a href="url">タグを生成する部分なのですが
3行目の<xsl:value-of select="linkname"/> の部分で
java.lang.IllegalArgumentException: The output format must have a '{http://xml.apache.org/xslt}content-handler' property!
という、エラーが出ます
ちなみに、情報になるかわからないのですがJDOMを使用しています
0504デフォルトの名無しさんNGNG
>>503
スレ違い
0505デフォルトの名無しさんNGNG
>>503
敬語の用法が間違っている
0506503NGNG
たった今、解決しました
とりあず、wsdp1.2のJarファイルをJ2sdkのlibフォルダにコピーしたら出来ました

詳細
%WSDP_HOME%\jaxp\lib\endorsed\*.jarを
%JAVA_HOME%\jre\lib\endosed以下にコピー

ちなみにJava2SDK1.4.1._02の場合です
0507デフォルトの名無しさんNGNG
xmlってvbsみたいなことできないの?
0508山崎 渉NGNG
(^^)
0509デフォルトの名無しさんNGNG
>507
vbsみたいなことってどんなだよぬ
0510デフォルトの名無しさんNGNG
すいません、なんか上手くいかなくて困っています
スキーマ定義です↓

<?xml version="1.0" encoding="UTF-8"?>
<staff-list>
<staff id="001">
<name>山田</name>
</staff>
<staff id="002">
<name>斉藤</name>
</staff>
<staff id="003">
<name>岡田</name>
</staff>
<staff id="004">
<name>山下</name>
</staff>
</staff-list>

XPathで、取り出したElementをそのまま新しいDocumentとして
構築したいのですが上手くいきません
感覚的には、Document doc=new Document(elem);でいいのかなと思っているのですが
以下のエラーが出ます
org.jdom.IllegalAddException: The element already has an existing parent "staff-list"

0511デフォルトの名無しさんNGNG
//これがソースです JDOM使ってます
import org.jdom.Document;
import org.jdom.Element;
import org.jdom.output.XMLOutputter;
import org.jdom.xpath.XPath;

public class Test {

public static void main(String[] args) throws Exception {

//ファイルからDocument構築して読み込み
//XmlIO#buildDocumentは別クラス
Document inputdoc = XmlIO.buildDocument("staff.xml","Shift_JIS");

//検索処理
Element elem = (Element) XPath.selectSingleNode(inputdoc, "/staff-list/staff[@id=\"001\"] ");

//わざわざ、新しいElementを作って値をコピーしないとエラーになる
Element root = new Element("staff-list");
Element staff = new Element("staff");
Element name = new Element("name");
staff.setAttribute("id", elem.getAttributeValue("id"));
name.setText(elem.getChild("name").getText());
staff.addContent(name);
root.addContent(staff);

// Document doc =new Document(elem);←本当は一発でこうやりたいが、これやるとエラー
Document doc =new Document(root);
XMLOutputter out = new XMLOutputter(" ", true, "Shift_JIS");
out.output(doc, System.out);
}
}
0512デフォルトの名無しさんNGNG
↑Shift_JISはUTF-8です書き間違えています読み替えてください
0513デフォルトの名無しさんNGNG
XSLT 使え。
0514デフォルトの名無しさんNGNG
>>510
エラーメッセージ通りの意味ですな。
試していないけど、duplicateすればparentが無くなると思うので、
duplicateしてからnew Document(dup);としてみたらいいんじゃないの?
0515デフォルトの名無しさんNGNG
>>514
ありがとうございます

でも、新しく作ったDocument docにElement入れても
重複なんてしないのになぁ と、思っています
0516デフォルトの名無しさんNGNG
>>515
そうじゃなくて、君がxpathで取り出してきたstaffエレメントは、
自分自身の属性の中にparent情報を持っているんだよ。具体的にはstaff-listエレメント。

だから、staffエレメントをそのままdocmentルートにしようと思っても、
当然ルートは親を持たないから矛盾する。それがエラーメッセージ。英語読めるよね。

cloneNodeなんかを使って親の情報を消せば、多分うまく行くんじゃない?と思った。
結果教えてね。
0517デフォルトの名無しさんNGNG
>>516
ありがとうございます

例の英語のエラーメッセージですが僕は
「ルート要素が既に存在します」と、思っていました
でも実際の訳は
「ルート要素の情報が一致しない(あるはずなのに無い)」なんですね

「ルート要素ある」⇔「ルート要素の情報を持ってる」

これは、大きな勘違いでした。でもこの指摘によりいろんな謎が解けました
指摘していただいたparentをはずす処理に当たるのがorg.jdom.Element#detach()です。
JDOMのJavadocはもっていないのですが、
org.jdom。Elementのソースコードのコメントに以下のように書いてあったので期待する動作をすると思われます
/ * This detaches the element from its parent, or does nothing if the
/ * element has no parent.


で、修正後のコードです
Element selected = (Element) XPath.selectSingleNode(inputdoc, "/staff-list/staff[@id=\"001\"] ");
selected.detach();//←org.jdom.Element#detach() 戻り値を利用せずにそのまま使えそうです
//selected=(Element)selected.clone();←コレでも動作しますが、detachのほうがスマートですかね
Document resul = new Document(selected);
XMLOutputter out = new XMLOutputter(" ", true, "Shift_JIS");
out.output(resul, System.out);
0518デフォルトの名無しさんNGNG
XSLの中で、外部ファイルの有無によって処理を分岐させたいのですが、
外部ファイルの有無を調べる方法がいまひとつわかりません。
ファイルの有無を調べてその結果を反映するXMLを返すCGIスクリプトを書いて
document()で取り込んで見たりしたのですが、これはパースに時間がかかりすぎて
だめでした。
MSXMLを使ってIE上で表示させています。何か方法があったら教えてください。
おながいしまつ。
0519デフォルトの名無しさんNGNG
>>517
ルート要素と親を勘違いしているっぽい。

>>518
試してないんだけど(こればっかですまないっす)、
<xsl:valiable name="check" select="document('foo.xml')"/>
<xsl:if test="$check/root">何か処理</xsl:if>
じゃダメですかね?msxmlは長らく使っていないのでサポートしているかどうか微妙だけど。
0520デフォルトの名無しさんNGNG
ASPだと簡単にXMLの送受信ができるんだね

> xmlData.Load "data.xml"
> Set xmlHTTP = CreateObject("Msxml2.ServerXMLHTTP")
> xmlHTTP.Open "POST", "http://hoge/hoge.asp", False
> xmlHTTP.send xmlData
> resXML = xmlHTTP.responseXML.xml

Perl, PHPで同じ事するソースわかる人いますか??
悔しいけどASPなめてた自分に鬱
0521デフォルトの名無しさんNGNG
XML::Parserとか。Perl-XMLで出てくる
0522デフォルトの名無しさんNGNG
どうもMSはXMLをiniファイルの代わりにしか見ていないような。
もちろんそれも重要な用途の一つなのだが。
0523デフォルトの名無しさんNGNG
いいだけWEBサービスに力入れてるじゃん。独自路線だけど。
0524デフォルトの名無しさんNGNG
>>521
サンクスコ。
Parserモジュールでできるんやね。
ちょと調べてみる
0525デフォルトの名無しさんNGNG
>>522
XML形式で出力できるアプリもあるぞ
0526520NGNG
ぐぐったり本屋で調べても、SOAPとかXML通信の概要しか出てこない・・・
すまん、誰かヒントください。
0527520NGNG
Perl(CGI)でDOMオブジェクトをHTTP(S)でPOSTするのって、
普通にSocket接続してHTTP通信するっていうのが普通だったりします??
0528デフォルトの名無しさんNGNG
>>527
普通だったりするよ。他にどんな方法がある?
0529520NGNG
>>528
thx!

てっきりもっとむずいのかとオモテタ
(XML::DOM->http_post(URL); みたいなの想像)
そりゃ、見つからんわな

syobo-n
0530デフォルトの名無しさんNGNG
ANTのxsltタグが正常に働いてくれなくて困ってる。
具体的には、「stylesheetにはversion属性が必要です」というエラーが出てきて
(ちゃんとDTD通りの順序でversion="1.0"を書いているにもかかわらず)
それでも一応出力できるんだけど、出力されたファイルはxslファイルそのまま。

問題は上のエラーだと思うんだけど、もう何がなんだかわからない。
ちなみにエラーの出るxslファイルはこれ。
<?xml version="1.0"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3c.org/1999/XSLT/Transform">
<xsl:template match="/"><root></root></xsl:template>
</xsl:stylesheet>
0531デフォルトの名無しさんNGNG
はい、かなり悲しい事故レスです。こんなくだらないミスで2時間ほど無駄にした。

×<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3c.org/1999/XSLT/Transform">
○<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSLT/Transform">
0532デフォルトの名無しさんNGNG
もうひとつ ×XSLT ○XSL でした。うろ覚えじゃダメだな、ホント
0533山崎 渉NGNG
    (⌒V⌒)
   │ ^ ^ │<これからも僕を応援して下さいね(^^)。
  ⊂|    |つ
   (_)(_)                      山崎パン
0534デフォルトの名無しさんNGNG
このスレでレポート・論文用の文書型+PDFに変換するXSLTを作ってくれまいか?
いい加減TeXマンドクセーんだ
0535デフォルトの名無しさんNGNG
>>534
自分でXMLからTeXに変換するxslを作成すれば良いのではないかと。
というか、既に誰かやっているんじゃないか?
0536デフォルトの名無しさんNGNG
>>535
それもマンドクセーんだ
探すのもマンドクセーんだ
0537デフォルトの名無しさんNGNG
XMLって何に使うの?実際に何に使われているの?
CSVの発展形みたいなもの?
0538デフォルトの名無しさんNGNG
>>537
次世代の時代遅れだな
0539>>2ちゃんねらーの皆さんNGNG
( ´Д`)/< 先生!!こんなのを見つけました。
http://www.hokekyoji.com/
http://www.yakuyoke.or.jp/
http://members.tripod.co.jp/hossyoji/index/
http://www.maap.com/tanjoh-ji/
http://www.honmonji.or.jp/
http://www.maap.com/tanjoh-ji/
http://www.kuonji.jp/
http://www.butsuzou.com/jiten/sanmen.html
http://www.butsuzou.com/list1/sanmen2.html
http://www.butsuzou.com/list1/sanmen3.html
http://www.butsuzou.com/keitai/sanmen-kz.html
0540デフォルトの名無しさんNGNG
>>534
既にある
www.docbook.org
0541デフォルトの名無しさんNGNG
>>540
thx
http://sourceforge.net/projects/docbook/
のdocbook-xslイイネ
0542>>2ちゃんねらーの皆さんNGNG
( ´Д`)/< 先生!!こんなのを見つけました。
http://www.hokekyoji.com/
http://www.yakuyoke.or.jp/
http://members.tripod.co.jp/hossyoji/index/
http://www.maap.com/tanjoh-ji/
http://www.honmonji.or.jp/
http://www.maap.com/tanjoh-ji/
http://www.kuonji.jp/
http://www.butsuzou.com/jiten/sanmen.html
http://www.butsuzou.com/list1/sanmen2.html
http://www.butsuzou.com/list1/sanmen3.html
http://www.butsuzou.com/keitai/sanmen-kz.html
■ このスレッドは過去ログ倉庫に格納されています