XMLプログラミング
■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん
NGNG0511デフォルトの名無しさん
NGNGimport 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デフォルトの名無しさん
NGNG0513デフォルトの名無しさん
NGNG0514デフォルトの名無しさん
NGNGエラーメッセージ通りの意味ですな。
試していないけど、duplicateすればparentが無くなると思うので、
duplicateしてからnew Document(dup);としてみたらいいんじゃないの?
0515デフォルトの名無しさん
NGNGありがとうございます
でも、新しく作ったDocument docにElement入れても
重複なんてしないのになぁ と、思っています
0516デフォルトの名無しさん
NGNGそうじゃなくて、君がxpathで取り出してきたstaffエレメントは、
自分自身の属性の中にparent情報を持っているんだよ。具体的にはstaff-listエレメント。
だから、staffエレメントをそのままdocmentルートにしようと思っても、
当然ルートは親を持たないから矛盾する。それがエラーメッセージ。英語読めるよね。
cloneNodeなんかを使って親の情報を消せば、多分うまく行くんじゃない?と思った。
結果教えてね。
0517デフォルトの名無しさん
NGNGありがとうございます
例の英語のエラーメッセージですが僕は
「ルート要素が既に存在します」と、思っていました
でも実際の訳は
「ルート要素の情報が一致しない(あるはずなのに無い)」なんですね
「ルート要素ある」⇔「ルート要素の情報を持ってる」
これは、大きな勘違いでした。でもこの指摘によりいろんな謎が解けました
指摘していただいた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外部ファイルの有無を調べる方法がいまひとつわかりません。
ファイルの有無を調べてその結果を反映するXMLを返すCGIスクリプトを書いて
document()で取り込んで見たりしたのですが、これはパースに時間がかかりすぎて
だめでした。
MSXMLを使ってIE上で表示させています。何か方法があったら教えてください。
おながいしまつ。
0519デフォルトの名無しさん
NGNGルート要素と親を勘違いしているっぽい。
>>518
試してないんだけど(こればっかですまないっす)、
<xsl:valiable name="check" select="document('foo.xml')"/>
<xsl:if test="$check/root">何か処理</xsl:if>
じゃダメですかね?msxmlは長らく使っていないのでサポートしているかどうか微妙だけど。
0520デフォルトの名無しさん
NGNG> 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デフォルトの名無しさん
NGNG0522デフォルトの名無しさん
NGNGもちろんそれも重要な用途の一つなのだが。
0523デフォルトの名無しさん
NGNG0524デフォルトの名無しさん
NGNGサンクスコ。
Parserモジュールでできるんやね。
ちょと調べてみる
0525デフォルトの名無しさん
NGNGXML形式で出力できるアプリもあるぞ
0526520
NGNGすまん、誰かヒントください。
0527520
NGNG普通にSocket接続してHTTP通信するっていうのが普通だったりします??
0528デフォルトの名無しさん
NGNG普通だったりするよ。他にどんな方法がある?
0530デフォルトの名無しさん
NGNG具体的には、「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×<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デフォルトの名無しさん
NGNG0533山崎 渉
NGNG│ ^ ^ │<これからも僕を応援して下さいね(^^)。
⊂| |つ
(_)(_) 山崎パン
0534デフォルトの名無しさん
NGNGいい加減TeXマンドクセーんだ
0535デフォルトの名無しさん
NGNG自分でXMLからTeXに変換するxslを作成すれば良いのではないかと。
というか、既に誰かやっているんじゃないか?
0536デフォルトの名無しさん
NGNGそれもマンドクセーんだ
探すのもマンドクセーんだ
0537デフォルトの名無しさん
NGNGCSVの発展形みたいなもの?
0538デフォルトの名無しさん
NGNG次世代の時代遅れだな
0539>>2ちゃんねらーの皆さん
NGNGhttp://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既にある
www.docbook.org
0541デフォルトの名無しさん
NGNGthx
http://sourceforge.net/projects/docbook/
のdocbook-xslイイネ
0542>>2ちゃんねらーの皆さん
NGNGhttp://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
■ このスレッドは過去ログ倉庫に格納されています