トップページ⇒tech
986コメント332KB

XML教えて教室

■ このスレッドは過去ログ倉庫に格納されています
00011NGNG
わけわかんないです。
ばかです。
0654デフォルトの名無しさんNGNG
3秒前にこれを見つけたのでいまから試す。
http://park.ruru.ne.jp/ando/work/who/epojava/doc/xml.html
0655デフォルトの名無しさんNGNG
notepad only
0656デフォルトの名無しさんNGNG
誰かわかる人がいたら教えてください。
Windows2K Tomcat4.0.2、FOP0.20.3の環境下において、
Servletで、PDFを生成しようとしています。

1.
Illustrator10では、FOPサンプルのPDFが開かない。
ちなみに9.0とAcrobat Reader5.0だったら開く。

2.
FOPでの日本語禁則処理のやり方。

3.
IllustratorのSVGファイルをFOPで次のように取り込む。
<fo:external-graphic src="file:/C:/test.svg"/>
一度PDFを生成して、次にsvgファイルを変更して再度PDFファイルを
生成したときに、変更したsvgファイルが反映されない(前のバッファが働いている模様)。
とりあえず、svgにそのつど別名をつけて回避はできているが、よりよい方法はないか?

長くなりましたが、よろしくお願いします。
0657びょNGNG
BSML(Bioinformatics Sequence Mark-up Language)
についておしえてください。
バイオ・ゲノムがらみのXML動向やなんかも。
0658仕様書無しさんNGNG
>>657
へーイ。そういう特殊なのは自分で探し給え。
G-XMLでさえ殆ど文献ないのに。
0659デフォルトの名無しさんNGNG
つーかむしろ生物板いけっすね。でもXMLの規約なんてデータだけ見ても
大体見当付くと思うよ。
0660デフォルトの名無しさんNGNG
FOってスラッシュドットで載ってよ。
0661名無しさん@EmacsNGNG
XMLの妥当確認をするlintチックなアプリケーションって
あるのでしょうか…
0662デフォルトの名無しさんNGNG
http://www.sun.com/software/xml/developers/multischema/
0663デフォルトの名無しさんNGNG
類似すれ乱立によりあげます
0664デフォルトの名無しさんNGNG
>>661
http://validator.w3.org/
名前は HTML Validation Service だけど、
SGML / XML ならなんでも検証できる。
0665デフォルトの名無しさんNGNG
>>661
libxml2 付属の xmllint
0666デフォルトの名無しさんNGNG
>>664
validかどうかの検証もできるの? 対応すきーまは?

0667387NGNG
>>666
DTD オンリーかな?
ちなみにパーザ自体はこれを使っている↓
http://www.jclark.com/sp/
0668ロックNGNG
XMLファイルの読み書きをするにあたって、xmlファイル自体の排他処理って
どうなってるんでしょう?

たとえばDomだと、
xml.load("hoge.xml");
// メモリ上で編集
xml.save("hoge.xml");
の間で別の誰かにhoge.xmlを編集されちゃったら困ります。

Domのloadには、Writeopen+lockの機構って備わってないんでしょうか?
0669デフォルトの名無しさんNGNG
それはライブラリではなく、
プログラム書く側が面倒みるべきことかと
0670ロックNGNG
>>669
やっぱり、べたべたにロック機構を実装しないかんってことですね。
どうせみんな組み込むのだから、ライブラリ側に組み込まれてないかなー
とおもったのですが・・・残念。
0671デフォルトの名無しさんNGNG
>>670
ファイルロックはXML自体と関係無いでしょ。
0672ロックNGNG
>>671
まあそうなんですが、load,saveがあるからひょっとしたら、と思ったんですよ。
Webアプリとか作るときには必ず問題になるはずなんで。
0673デフォルトの名無しさんNGNG
>>672
アプリ用ファイルサーバ(ファイルI/O担当)クラスをシングルトン
で自作する。それが一番簡単。
0674ロックNGNG
>>673
ofstreamかなんかから派生させてlibにでもしときますかね。
汎用のライブラリはないのかなあ。

#実はシングルトンがわからなかったり・・・
0675デフォルトの名無しさんNGNG
>>674
ストリームを派生する?ちゃうちゃう、もうちょっと上のレイヤー。
DBサーバみたいなイメージでアプリケーション全体のファイルI/Oを
管理するサーバクラスなりサーバプロセスなりを作るのよ。
0676ロックNGNG
>>675
つまり、FileManager見たいなクラスをつくって、そこで
全てのファイルの入出力状況をテーブルなり何なりで持っていて、
全てのファイルIOはそのクラスを経由して行うってことでしょうか?

でそれをサービスなりデーモンなりで常駐しておくと。

なんか壮大な話になってきた・・・
0677デフォルトの名無しさんNGNG
jdk1.4 java.uitl.loggingなんかがそれ。
拡張性を考慮しないなら難しくはない。
0678ロックNGNG
つうことで、ASP、VC++プログラム、VBプログラムなどから同じXMLファイルを
触ることになるので、COMなるものを使ってXMLネイティブDBサーバもどきを
実装することになりそうです・・・

#排他したいだけだったのに・・・
0679デフォルトの名無しさんNGNG
678>>
COMを使わなくてもDBにXMLを格納しておき、読み込むという手もある。
ASPを使うなら、現実的じゃないのか?

しかし、なんだか.NETっぽい内容だな。
実際678の言っている状況っていったいどんな時に発生するわけ?
なんか設計段階で無茶してる気がするが...

0680デフォルトの名無しさんNGNG
3つのファイルから下記のような表示をさせたいのですが,
思ったように表示されません.
こういうことはxsltだけではできないのでしょうか?
ご指導のほど,よろしくお願いします.

・ほんとはこうやって表示して欲しい
nodeA 0A  1A  2A  3A
nodeC 0C  1C  2C  3C
nodeD 0D  1D  2D  3D

・でも実際はこうやって表示される
nodeA nodeA nodeA nodeA nodeA
nodeC nodeC nodeC nodeC nodeC
nodeD nodeD nodeD nodeD nodeD

・data.xml
<?xml version="1.0" encoding="Shift_JIS" ?>
<?xml-stylesheet type="text/xsl" href="datadisp.xsl"?>
<result>
<root id="0">
<nodeA>0A</nodeA>
<nodeB>0B</nodeB>
<nodeC>0C</nodeC>
<nodeD>0D</nodeD>
</root>
<root id="1">
<nodeA>1A</nodeA>
<nodeB>1B</nodeB>
<nodeC>1C</nodeC>
<nodeD>1D</nodeD>
</root>
<root id="2">
<nodeA>2A</nodeA>
<nodeB>2B</nodeB>
<nodeC>2C</nodeC>
<nodeD>2D</nodeD>
</root>
<root id="3">
<nodeA>3A</nodeA>
<nodeB>3B</nodeB>
<nodeC>3C</nodeC>
<nodeD>3D</nodeD>
</root>
</result>

続きます
0681デフォルトの名無しさんNGNG
・disp.xml
<?xml version="1.0" encoding="Shift_JIS" ?>
<root>
<element id="nodeA"></element>
<element id="nodeC"></element>
<element id="nodeD"></element>
</root>

・datadisp.xsl
<?xml version="1.0" encoding="Shift_JIS"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
>
<xsl:template match="/">

<xsl:variable name="data" select="/" />
<xsl:variable name="disp" select="document('disp.xml')" />

<table border="1">
<xsl:for-each select="$disp/root/element">
<tr>
<td><xsl:value-of select="@id" /></td>
<xsl:variable name="xxxid" select="@id" />
<xsl:for-each select="$data/result/root">
<td><xsl:value-of select="$xxxid" /></td>
</xsl:for-each>
</tr>
</xsl:for-each>
</table>
</xsl:template>
</xsl:stylesheet>
0682デフォルトの名無しさんNGNG
well-formedの検証で

<url>http://www.google.co.jp/search?q=cache:7p10RFh1by0:www.felix.or.jp/~yugo/js/location03.html+javascript++%83G%83%93%83R%81%5B%83h&hl=ja</url>

で、だめだから表示できないような、文字化けした表示が出ました。
どうやら「=」がだめっぽいのですが、
文字データ中に半角の = は、入れてはいけないのですか?
代用文字があったら教えてください。
0683デフォルトの名無しさんNGNG
ひっかかってるのは&じゃないのか?ちなみに&amp;で置き換える。
0684デフォルトの名無しさんNGNG
felix.or.jpじゃなくてfelix.jpダネ!
0685682NGNG
>>683

そうでした。アリガト
0686デフォルトの名無しさんNGNG
xsl:for-each内で
数字をインクリメントするやり方を教えてください。
0687デフォルトの名無しさんNGNG
IE6使ってるんですけど、
xmlがwell-formedじゃないと、
エラー表示が文字化けします。直す方法はないのでしょうか?
ちなみにエンドードは、Shift-JISしか選べないようになっている。
0688デフォルトの名無しさんNGNG
エンドード。Shift-JIS。
0689デフォルトの名無しさんNGNG
>>686
激しくガイシュツ
http://pc.2ch.net/test/read.cgi/php/999654569/
9あたりから

>>688
揚げ足はいいから、原因は何?
0690デフォルトの名無しさんNGNG
>>686
変数のインクリメントはできないよん。できないというか、発想が間違ってる。

call-templateで再帰して数えるか
ttp://moso.borogrammers.net/moso/diary/?200112c&to=200112212#200112212

軸(axis)を工夫
ttp://moso.borogrammers.net/moso/diary/?200201c&to=200201301S1#200201301S1
します。

後者のほうが理解が容易かもしれんけど、上のURLには(後者は)例が載ってないみたいな
ので、わからなければまた聞きなはれ。

0691デフォルトの名無しさんNGNG
XML擦れはなんで盛り上がらないんだろうな
0692デフォルトの名無しさんNGNG
>>691
まだ、便利さに気づいていないとか。そんな俺も勉強中。
勉強するならイマノウチ。 遅いかな
0693厨NGNG
JScriptから引数とってXSLTでxsl:ifやxsl:chooseで条件分岐したいのですが、
できますか?
(もしかして厨?宣言!)
0694デフォルトの名無しさんNGNG
出来たような。
0695デフォルトの名無しさんNGNG
>>693
いみがよくわかんない。どんな環境でどんなファイル構成?
0696デフォルトの名無しさんNGNG
>>693
無理→XML使えねえ→終了
0697デフォルトの名無しさんNGNG
>>693
MSのサイトを探せば出てくるよ
大変だったような気がする
0698厨NGNG
>>697
あそこだけは探したくない。ページ飛び遅いし...

市販の本見てたら、
なんかJScriptでgetElementByTagName("xsl:variable")したものを
変数に入れて、変数.text=入れたい値 として
XML側ではそのxsl:variable(いわゆるXSLの変数)の$hogehoge
で処理してた。ちょっとやってみます。
0699デフォルトの名無しさんNGNG
じゃあJScriptなんぞ使うな!!
0700デフォルトの名無しさんNGNG
>698
そんな場当たり的なやつじゃなくて確かAddParameter?みたいなメソッドでできるはず。
0701デフォルトの名無しさんNGNG
ちなみにxalanなら、XSLTプロセッサに処理を渡すときに、
-PARAM name value (Set a stylesheet parameter)
で渡せる。
0702デフォルトの名無しさんNGNG
>>698
ほんとに探してるのか?
っていうか、Microsoft XML Core Services (MSXML) 4.0 をもっとしっかり読んだ方がよい。

var xslt = new ActiveXObject("Msxml2.XSLTemplate.4.0");
var xslDoc = new ActiveXObject("Msxml2.FreeThreadedDOMDocument.4.0");
var xslProc;
xslDoc.async = false;
xslDoc.load("sample.xsl");
xslt.stylesheet = xslDoc;
var xmlDoc = new ActiveXObject("Msxml2.DOMDocument.4.0");
xmlDoc.async = false;
xmlDoc.load("books.xml");
xslProc = xslt.createProcessor();
xslProc.input = xmlDoc;
xslProc.addParameter("param1", "Hello");
xslProc.transform();
alert(xslProc.output);
0703厨NGNG
>>702
アリガト。深夜バイト行ってその後寝てた。

その"Hello"は、
<xsl:param name="param1">hoge</xsl:param>
に入っているで理解は良いの?
0704厨NGNG
Microsoft XML Core Services (MSXML) 4.0 なんだけど、
サイト見に行ったら
これってプログラムだけでDocファイルなさそうだけど
いっしょに落ちてくるのかねぇ?

っていうか、今IE6.0用のWEB公開用で作っているんだけど
4.0って標準装備してたっけ?

またJDKみたいにユーザーにダウンロードさせてからでないと
見れないのでは、ちょっと困るな。
0705702NGNG
File Name: Sample.xsl
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:output method="html"/>
<xsl:param name="param1"/>
<xsl:template match="/">
The parameter value was: <xsl:value-of select="$param1"/>
</xsl:template>
</xsl:stylesheet>

Microsoft XML Core Services (MSXML) 4.0は
MSDN Home > MSDN Downloads > Web Development > XML Web Services へいってみると良い。

4.0は標準装備ではないけど、MSXML Parser 3.0はIE5.5で標準装備。
XSLTも使えたと思うが。
0706デフォルトの名無しさんNGNG
わからん。お手上げだ。

XSLで変換したHTMLのinputの終タグだけなぜか抜ける。

- <body bgcolor="#FFFFCC">
<xsl:apply-templates select="リンク情報/グループ" />
- <form name="Myform">
<input type="radio" name="condition" value="C言語">C言語</input>
<input type="radio" name="condition" value="C++言語">C++言語</input>
<input type="radio" name="condition" value="MFC関連">MFC関連</input>
<input type="radio" name="condition" value="JAVA言語">JAVA言語</input>
<input type="button" value="変換" onclick="getParam()" />
</form>
</body>
</html>
</xsl:template>

変換した後のJavaScriptが動かない。

変換後
<form name="Myform">
<input type="radio" name="condition" value="C言語">C言語<input type=
"radio" name="condition" value="C++言語">C++言語<input type="radio"
name="condition" value="MFC関連">MFC関連<input type="radio" name="condition"
value="JAVA言語">JAVA言語<input type="button" value="変換" onclick="
getParam()"></form>
</body>
0707デフォルトの名無しさんNGNG
出力をHTMLにしてるからだろ。XMLかXHTMLで出せば?
0708デフォルトの名無しさんNGNG
input に終了タグがあるのかと小一時間問いつめたい
0709デフォルトの名無しさんNGNG
>>708
いいこと言った。
0710デフォルトの名無しさんNGNG
保守
0711デフォルトの名無しさんNGNG
3日ほど前から勉強してるんですけど、
DTDについて質問です。

例えば、

<販売店>
 <名前>ショップ2ch</名前>
</販売店>
<商品>
 <名前>モナー人形</名前>
</商品>

みたいな時に、"販売店"配下の"名前"と"商品"配下の"名前"を
それぞれ全く別な物として、ELEMENTタグで各個に定義できますか?
0712>>711NGNG
できニャい
以上
0713デフォルトの名無しさんNGNG
>>712
そうですか。さんきゅう。
0714デフォルトの名無しさんNGNG
簡単だがここに載ってる。
http://www.asahi-net.or.jp/~ps8a-okzk/xml/xml_2/attlist.html

>同一の要素型に対して同じ名前の属性に関する属性リスト宣言が複数存在する場合には、
>最初のものだけが有効で、残りは無視されます。

>これは、異なる要素型に対してならば、 同じ名前を持った複数の属性を異なって(例えば異なる属性の型を持たせて)宣言できるということでもあります。
>同じ名前の要素に異なる構造の内容を与えることができないのと対照的です
--------------^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^---------
0715デフォルトの名無しさんNGNG
XSLTが書き方が悪いのかうまく表示されない。

<?xml version="1.0" encoding="Shift-JIS"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:output method="html" version="4.01" encoding="Shift-JIS" indent="yes"/>
<xsl:template match="/">
<html lang="ja">
<head>
<title>リスト</title>
</head>
<body bgcolor="#FFCC00">
<xsl:for-each select=".">
<xsl:choose>
<xsl:when test="@区分名='2CH'">
<xsl:apply-templates select="ジャンル"/>
</xsl:when>
<xsl:when test="@区分名='言語'">
<xsl:apply-templates select="//言語"/>
</xsl:when>
</xsl:choose>
</xsl:for-each>

</body>
</html>
</xsl:template>
<xsl:template match="ジャンル">
<p>
<xsl:value-of select="@ジャンル名"/>
</p>
</xsl:template>
<xsl:template match="言語">
<p>
<xsl:value-of select="@言語名"/>
</p>
</xsl:template>
</xsl:stylesheet>
0716デフォルトの名無しさんNGNG
XMLは、

〜中略〜
<リンク情報>
<分野区分 区分名="言語">
<言語区分 区分名="基本言語">
<言語 言語名="C言語">
<リンク先>
<題名>language C FAQ</題名>
<url>http://www.catnet.ne.jp/kouno/c_faq/c_faq.html<;/url>
</リンク先>
〜中略〜
<分野区分 区分名="2CH">
<ジャンル ジャンル名="ニュース">
<リンク先>
<題名>ニュー速</題名>
<url>http://choco.2ch.net/news/<;/url>
</リンク先>
〜中略〜
Validです。
0717デフォルトの名無しさんNGNG
ちなみに最初はこれで、bgcolor反映されず表示できたが、
xsl:choose部分→<sl:apply-templates select="言語区分"/>
xsl:choose部分を別<template match="言語区分">タグ内に移したら
背景色は表示されるが、文字が出ず、
DOMでhtmlに変換したら,
<body bg〜></body>内に表示されるべきpタグがごっそり抜けてた。

何でた?
0718715NGNG
自己レス。
分野区分を絡めるのを忘れてた。スマソ
いろいろやってみたが、
<xsl:template match="/">
を
A: <xsl:template match="/分野区分">
にすると、画面に背景色が表示されない。(さっき偶然できたものと思われ)
B: <xsl:template match="分野区分">
だと,ちゃんと動く。
Aは、ルートも入れたつもりだったが、これではい
けない理由は何だ?
0719デフォルトの名無しさんNGNG
今はXML SchemaとRELAX NGではどちらが優勢でしょ?

後、RELAX NGを少し勉強したんですが、データ型について質問です。

<data type="integer" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes" />

という記述を雑誌のXML WORLDで見たんですけど、
これはdatatypeLibraryで指定したURLに接続してintegerの定義情報を取得するって意味ですか?
(javaのimport文みたいな物?)
0720知ったか君3号NGNG
普通の人→処理系が勝手にXML Schemaで処理。
オタ→RelaxNGで手書き。
少数派→DTDで何の不足も無いよ!!
では?
0721 NGNG
relaxで書かれた文書があるのですが、この文書から、HTMLのフォームを楽に作り出す
方法はありませんかね?
0722デフォルトの名無しさんNGNG
XSLTでJavaScriptを出力しようとして躓きました。

<a ・・・ onclick="hoge("para")">

をhtmlで出力しようとしていますが、
<a>
〜(中略)〜
<xsl:attribute name="onclick">
hoge(
(あ)
<xsl:value-of select="piyo"/>
(あ)
);
</xsl:attribute>

として、(あ)には「"」を入れたいのですが、
<xsl:comment>としても<xsl:text disable-output-escaping="yes">としても
<![CDATA[ ]]>で囲んでもDOM変換して、ソースを見てみると
&quot;になってしまいます。

何かいい方法はありませんか?
皆さんは、JavaScriptを含んだhtml文章をどうやってXSLTで変換していますか?
0723721NGNG
結局DOMでパースして作った。
0724デフォルトの名無しさんNGNG
XMLを勉強しようと思ってるのですが、
環境的にはLinuxかWindowsの方がいいのですか?

Macユーザーです。
ちなみにLinuxを入れようと思っております。
0725( Д )ノペラボー ◆JavasjkU NGNG
>>724

XMLだったら別にどっちでもいいような。
でもLinux使える状況だったらとりあえずLinuxにしとけ。
一般には不便だが、開発者としては便利だよ。と思た。
とりあえず無難にRedhatにしとけ。
0726デフォルトの名無しさんNGNG
>>712
こういうDTDは許されていないってことですか?
<!ELEMENT 販売店 (名前)>
<!ELEMENT 商品 (名前)>
<!ELEMENT 名前 (#PCDATA)>
0727デフォルトの名無しさんNGNG
やっぱこのスレはXSLTの話が多くなるね。
それでいいと思うけれど。
0728( Д )ノペラボー ◆JavasjkU NGNG
>>722
><;xsl:comment>としても<xsl:text disable-output-escaping="yes">としても
><![CDATA[ ]]>で囲んでもDOM変換して、ソースを見てみると
>&quot;になってしまいます。
それでいいはず。実装気になるんだったら試しにIEで確認してみ。
っていうか、onclick="hoge("para")"は文法的にヤヴァいよ。
漏れも実体参照、文字参照系で悩んだな……。
久しぶりにXML勉強する気になったよ。ありがとう。

>>727
まあ、広い範囲で言えば、一番普及してるのがXSLTだからね。
個人のウェブサイトでも使ってるし(漏れも使っているよ。年に一度のCopyrightの書き換えは便利)。
0729722NGNG
>>728
確かに文法的にやばかったです。'でやって動きました。

ところで、実は別の問題にぶち当たりました。
今度やりたいのは、
「call-templateで呼ばれたときのカレントノードから見て、
その子ノードの属性にnameがあれば、1加えて、再帰する。
再帰したカレントノードの子ノードにnameがあれば、1加えて再帰する・・・
再帰したカレントノードの子ノードにnameがないときに、再帰を止める」
といったことです。以下のようにXSLTを書きましたが、
条件がうまく判定されてないのか、無限ループになってしまいます。
条件判別が悪かったのでしょうか?
それとも再帰のたびに下のカレントノードが下に移ってないのでしょうか?

〜(中略)〜
<xsl:attribute name="onClick">block_or_not(

<xsl:call-template name="seach_descend">
<xsl:with-param name="descending" select="1"/>
</xsl:call-template>
〜(中略)〜
<xsl:template name="seach_descend">
<xsl:param name="descending"/>
<xsl:choose>
<xsl:when test="*/@name">
<xsl:call-template name="seach_descend">
<xsl:with-param name="descending">
<xsl:value-of select="$descending +1"/>
</xsl:with-param>
</xsl:call-template>
</xsl:when>
<xsl:otherwise>
'<xsl:value-of select="$descending"/>',
</xsl:otherwise>
</xsl:choose>
</xsl:template>
0730729NGNG
今、上の問題をいろいろ考えているのですが、

1つ思いついたのが、条件ノードもパラメータに渡して
変化を加えていくことです。
つまり
<xsl:with-param name="condition">
<xsl:value-of select="concat('*/',$condition)"/>
</xsl:with-param>
することで*/@nameを*/*/@name・・・と代えていき条件を見ようとしています。
しかし、最初に
<xsl:with-param name="condition">*/@name</xsl:with-param>
とすると、ノードとしてとらえてくれないようです。
($conditionを*にして試しに<xsl:value-of select="$condition/@name"/>
 などやると「パラメータ$conditionへの参照はノードリストへ評価する必要があります」
 と出てしまいます)
逆に<xsl:with-param name="condition" select="*/@name"/>とすると、
再帰する前の時点で*/@nameを(例えば自分の場合b-langなどに)変換してしまい。
デバックしてみると、
$condition→b-lang→*/b-lang→*/*/b-lang
となってしまって、思うようになりません。
($condition→*/@name→*/*/@name→*/*/*/@nameとしたい)

事前変換無しにノードとして認識させるにはどうすればいいのでしょうか?
また、もっと良い方法があるという方教えてください。
0731デフォルトの名無しさんNGNG
>>726
それはできる。
ただし、両方の'名前'要素の意味は基本的には同じ物になる。

# 例えば <!ATTLIST 名前 xmlns CDATA #REQUIRED > として
<名前 xmlns="http://foo.org/商品"> と <名前 xmlns="http://foo.org/販売店">
のような手段を用いれば「意味」を分けることもできるけど、
「'商品'要素直下の'名前'要素は 'http://foo.org/商品'」
「'販売店'要素直下の'名前'要素は 'http://foo.org/販売店'」
というような振り分けは DTD では表現できない。

…伝わるだろうか。
0732デフォルトの名無しさんNGNG
>>731
解説どうもありがとうございました。
伝わったと思います。多分。

ひとたびおなじ名前の要素にぶつかったら、
(XML文書のツリー構造の上下で)そこから下は
同じものにならざるおえない。ということですね?

同じ「名前」という要素で、その上位の構造によって
全く別々の構造を表現したい、というのもわからんでもないです。
が、なんとなく「ん?」と思うような気もします。なんでかというと、
> ただし、両方の'名前'要素の意味は基本的には同じ物になる。
というのは、当然のことだと思うからです。

「名前」は「名前」であって、人名/商品名/販売店名など、
どういう文脈であっても同じなんではないかと思います。
もし仮に「販売店」の名前のときのみ、なにか追加の構造
が必要なら、それは「販売店」特有の構造であって「名前」そのものが
違う構造になっているわけではない、と思います。
例えば、XMLからは離れてしまいますが、プログラミング言語などで、
 product_name: STRING;
 shop_name: STRING;
とかいう変数宣言があったとき、おなじSTRINGではありながら
shop_nameのときは別途追加の構造を作りたいというのは
そのままではやるのではなく、STRINGから継承したなにか
別のタイプを定義したりしますよね? あるいは、shop_nameを
利用する側で付加情報を別途保持するようにするとか。

なんとなく、商品−商品名、販売店−販売店名の例があまり
よくなかったのでは、という気もなきにしもあらずですが…。
同じ要素名なのに、文脈によって違う構造をもたなくてはならない
必然性のある例というのは他にどんなのがあるのでしょうか?
0733デフォルトの名無しさんNGNG
あのー話が極端にかわるのですが、
PHPとXMLの連携は便利なのでしょうか?
0734 NGNG
昔の話をぶり返してもいいですか? つか、ぶりかえします。

>>321 -332
このXSLTってXML形式じゃないっすよね。
(要はMSXMLな方言を使った方式)
勧告に沿った答えを知っている方、どうか回答お願いします。
Cocoon使うとこれじゃだめなのよ。ひーん。
0735734NGNG
変数使ったらあっさりだったので自己レス。。。かっこ悪いかもだけど。
test.xml
---
<?xml version="1.0" encoding="Shift-JIS"?>
<?xml-stylesheet type="text/xsl" href="test.xsl"?>
<?cocoon-process type="xslt"?>
<root>
<data>a</data>
<data>b</data>
<data>c</data>
<data>d</data>
<data>e</data>
</root>
---

test.xsl
---
<?xml version="1.0" encoding="Shift_JIS"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns="http://www.w3.org/profiles/XHTML-strict" xmlns:fo="http://www.w3.org/1999/XSL/Format">
<xsl:output method="xml" encoding="Shift-JIS" />
<xsl:template match="/">
<xsl:processing-instruction name="cocoon-format">type="text/html"</xsl:processing-instruction>
<html><head><title></title></head><body><xsl:apply-templates/></body></html>
</xsl:template>
<xsl:template match="root">
<table border="1">
<xsl:for-each select="data">
<xsl:variable name="CNT" select="position()"/>
<xsl:if test="position() mod 3 = 1">
<tr>
<td><xsl:value-of select="../data[position()=$CNT+0]"/><BR/></td>
<td><xsl:value-of select="../data[position()=$CNT+1]"/><BR/></td>
<td><xsl:value-of select="../data[position()=$CNT+2]"/><BR/></td>
</tr>
</xsl:if>
</xsl:for-each>
</table>
</xsl:template>
</xsl:stylesheet>
0736729NGNG
レスも返ってこず、自分でもいくらもがいてもできず、まだテンパッテます。

「XSLTで、再帰させてたときカレントノードを子ノードに移し
 カレントノードに移った子ノード属性にnameがあるか(<xsl:if test="@name">)」

としたい、または

「パラメータ使って、上記test式を*/@name,*/*/@name・・・と換えていきたい」
(実際パラメータ値は換えられるが、文字列であってノードセットとして認識しない)

この2つの方法が思いつきましたが、うまくいかないようです。
(xsxml:node-setは2番目の方法を可能にするが、IE6には対応してないようだ)

どなたかうまいやり方知っていますか?
それか上の2つのやり方で何とかならないですか?
0737デフォルトの名無しさんNGNG
私はよくmsxmlを使ってxsltでxhtmlを出力しているんですが、
xhtmlではなくhtmlを出力する(平たく言えば昔のネスケでも読めるhtmlを出力する)方法は
ないものでしょうか?
0738721NGNG
結局、
(1)relaxからフォームの自動生成
(2)フォームの入力結果から、xmlドキュメント

の二つを作った(domでパースして)(1)は別に
(1-a)キャプションとか
(1-b)必須項目かどうか
(1-c)テキストの際の入力領域のサイズとか
そういう情報は別の配列で用意した。

(2)は、入力結果をHashtable(キーが項目名で、値が入力された値)で用意して、またrelaxファ
イルをパースしてjava.lang.reflectでrelaxerが生成したクラスを生成して、setterメソッドで
入力値をセットした。最後にツリーのルートになるオブジェクトをxml化。

でも仕事でやっちゃったのでオープンに出来ないのが残念。多分探せばあるのだろうけど
わかんなかった。
0739デフォルトの名無しさんNGNG
>>737
XHTML は昔のネスケにも読めると思うが。
0740デフォルトの名無しさんNGNG
>>739
non。
<br />なら認識するけれど、<br/>だと認識しない。
ま、仕方ないけれど、htmlの出力としては<br>を期待したいね。

>>737
確かmsxmlにはその機能があったと聞いたことがある。調べて是非報告してくれ
他のパーサなら、こうすればいいんじゃないか?
・子供要素を持たないタグ(ex:<br/>等)は、間に空のテキストノードを挿入して
 全て<br></br>という形にする
・実際に閉じタグのいらないタグ(ex:<br><hr>等)は、普通にテキスト処理で
 閉じタグを消してしまう。(中には</textarea>の様に、空でも閉じタグがいるものもある)
0741デフォルトの名無しさんNGNG
>>737 >>740
ほえ???msxmlの機能???
ここの http://www.infoteria.com/jp/REC-xslt-19991116-jpn.htm
16章、xsl:output を読みなされ。
0742739NGNG
>>740
勿論その程度の配慮はしてってことだよ。
そんなことを言い出したら HTML 4.01 にまともに対応している
ブラウザなんて皆無だろ。バグがあるってのと対応してないってのは違う。
0743デフォルトの名無しさんNGNG
キミらズレまくり。741が理解できない?
0744デフォルトの名無しさんNGNG
xsl:numberで21から番号の振り方教えてくれ。
0745デフォルトの名無しさんNGNG
>>744
http://www.infoteria.com/jp/REC-xslt-19991116-jpn.htm の7.7嫁。
んで、きっともっと複雑なことがしたくなるんだろうけど、そしたら
http://pc.2ch.net/test/read.cgi/tech/982914729/570-
あたりにハゲしくガイシュツなのでそっちを参照のこと。
0746デフォルトの名無しさんNGNG
<style type="text/css">
<!--
body{background-color : #ffffff;}
-->
</style>

xslファイルの<head></head>に↑を入れるとxmlの<body>以下が表示されなくなります。
コメントを外すと大丈夫みたいです。
なぜでしょう。
0747デフォルトの名無しさんNGNG
スキーマってなんですか?
0748デフォルトの名無しさんNGNG
>>746
.xsl に CSSとかJavaScriptとかかくときは、<!-- --> でなくて
<xsl:comment> で囲まないとダメでしょ。
0749デフォルトの名無しさんNGNG
<meta name="author" content="<xsl:value-of select="制作者" />" />
メタタグ中の例えば上記だとauthor(制作者)情報もデータだと思うので
xmlに記述した<制作者>モナー</制作者>のデータを抽出しようと思ったのですが
うまくいかないです。これは普通にxslの中に
<meta name="author" content="モナー" />
と書くしかないですか?
0750デフォルトの名無しさんNGNG
bakabakka
0751デフォルトの名無しさんNGNG
MKrelaxってどうよ。
意味ある?
0752デフォルトの名無しさんNGNG
誰か〜
0753デフォルトの名無しさんNGNG
age
■ このスレッドは過去ログ倉庫に格納されています