• 締切済み

XMLの解析に関して

dscriptyの回答

  • dscripty
  • ベストアンサー率51% (166/325)
回答No.4

B2 の直前の A1 の子要素 A2 のテキストを取得 preceding-sibling::A1[position()=1]/A2/text() でも、 [ANo.3]>『「構造を考え直すべし」という #2 の指摘には同意.』 には同意。 ■ 確認 [q7568320.xml] <?xml version="1.0" encoding="UTF-8" ?> <!--?xml-stylesheet type="text/xsl" href="q7568320.xsl"?--> <root>   <A1><A2>1</A2></A1>   <B1><B2/><B2/><B2/><B2/></B1>   <B1><B2/><B2/><B2/><B2/></B1>   <B1><B2/><B2/><B2/><B2/></B1>   <B1><B2/><B2/><B2/><B2/></B1>   <A1><A2>2</A2></A1>   <B1><B2/><B2/><B2/><B2/></B1>   <B1><B2/><B2/><B2/><B2/></B1>   <B1><B2/><B2/><B2/><B2/></B1> </root> [q7568320.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="root" />   </xsl:template>   <xsl:template match="root">     <result>       <xsl:apply-templates />     </result>   </xsl:template>   <xsl:template match="A1" />   <xsl:template match="B1">     <xsl:copy>       <xsl:attribute name="A2">         <xsl:value-of select="preceding-sibling::A1[position()=1]/A2/text()" />       </xsl:attribute>       <xsl:apply-templates select="@*|node()" />     </xsl:copy>   </xsl:template>   <xsl:template match="@*">     <xsl:copy />   </xsl:template>   <xsl:template match="node()">     <xsl:copy>       <xsl:apply-templates select="@*|node()" />     </xsl:copy>   </xsl:template> </xsl:stylesheet> ■ 結果 $ xsltproc q7568320.xsl q7568320.xml <?xml version="1.0" encoding="UTF-8"?> <result>         <B1 A2="1"><B2/><B2/><B2/><B2/></B1>         <B1 A2="1"><B2/><B2/><B2/><B2/></B1>         <B1 A2="1"><B2/><B2/><B2/><B2/></B1>         <B1 A2="1"><B2/><B2/><B2/><B2/></B1>         <B1 A2="2"><B2/><B2/><B2/><B2/></B1>         <B1 A2="2"><B2/><B2/><B2/><B2/></B1>         <B1 A2="2"><B2/><B2/><B2/><B2/></B1> </result> $

s02152170
質問者

お礼

御回答ありがとうございます。 SelectNodes("A1|B1")でList作成して for文で回しタグ名確認しながら情報取り出そうと思ったのですが、 >preceding-sibling::A1[position()=1]/A2/text() 今回のケースに合うか調べてみます。 サンプルありがとうございます。 自分も激しく同意です・・・ ありがとうございました。

関連するQ&A

  • CGIでXML解析したいです

    この質問はCGIで投稿したのですがこちらの方が適切ですかね? XML形式のクエリーを送信させてそれをPERLで解析したいのですがうまくいきません。 <LOGIN USERNAME="hanako" PASSWORD="875" /> 上記形式のXML(将来的には情報を付加)なんですがFLASHから生成させています。 環境変数など調べてみたのですがメソッドはPOST,CONTENT_LENGTHもしっかり入っています。 どこに送られてきたデータがあるのでしょうか、またXMLを解析するモジュールでもあるのでしょうか(XML::DOM,PARSER?使用方法が乏しいです)、よろしくお願いします。

  • VB2005でXMLデータから複数ある要素の数を読み取る方法

    VB2005、XMLの初心者です。 VB2005でXMLデータを読み取って、DBに登録するプログラムを作っています。 XMLデータから項目を読み取るのは、下記のようにパスを指定してできることが分りました。 CreatorInfodNode = xmlDoc.SelectNodes("/Mml/Body/Module", nsmgr1) ID = CreatorInfodNode(0).InnerText.Trim しかし、下記のような同じ要素が複数あるXMLデータの場合、全ての要素を解析してDBに登録したいのですが、要素の数はどうやって読み取れば良いのでしょうか。ちなみに、要素の数は可変です。 上記のパスを指定する場合、要素のタグが同じなら全てパスは同じになり、最初の要素を取ってくるようですが、複数ある場合は全てを解析したいです。 <Mml> <Body> <Module>A</Module> <Module>B</Module> <Module>C</Module> </Body> </Mml> 何かヒントになるようなことでも良いので、皆様の知恵をお借りできれば幸いです。 よろしくお願い致します。

  • VB.NETでテキストファイルの解析についてヒントをいただけないでしょ

    VB.NETでテキストファイルの解析についてヒントをいただけないでしょうか? 通常のテキストファイルなのですが中身は 「<div class=・・・」といったようなタグが記述されています。 特定のクラス名を見つけたらそのデータをテキストボックスに反映させたいのですがテキストファイルのタグを解析するメソッドなどが見つかりません。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
  • 2つのxmlファイルを利用したリレーションシップ(?)に関して

    2つのxmlファイルを使用し、リレーションシップ(?)を作成してDataGridViewに表示させようとしているのですがうまくいきません。ご教授お願いいたします。 xmlファイル1: <タグ1> <タグ2 属性21="a1" 属性22="a2"></タグ2> <タグ2 属性21="b1" 属性22="b2"></タグ2> <タグ2 属性21="c1" 属性22="c2"></タグ2> </タグ1> xmlファイル2: <タグ1> <タグ2 属性21="a1" 属性22="d2"></タグ2> <タグ2 属性21="b1" 属性22="e2"></タグ2> <タグ2 属性21="c1" 属性22="f2"></タグ2> </タグ1> 表示させたい内容: | d2 | a2 | | e2 | b2 | | f2 | c2 |

  • XMLタグ情報取得

    PHPにxmlファイルのタグ情報を利用するシステムを構築したいのですが、調べてもよく解らなかったため質問させて頂きます。 PHPは勉強経験があるため解るのですがXMLはまったくの初心者です。 システムは以下の流れです。 システムA(PHP) <?php  $i;  if($iがシステムBで使用されているか確認){   使用されている場合$iで処理  }else{   使用されていない場合xmlファイルからタグ情報取得   for($iの親タグ<B>を取得){    if(<$i><$j><$k>のどれかがシステムBで使用されていないか?){     $jが使用されていた場合、システムAの$iと、システムBの$jは同じ使用用途のデータと判断し処理    }   }  } xmlファイル <?xml version="1.0" encoding="EUC-JP"?> <A> <B> <$i></$i><$j></$j><$k></$k> </B> </A> このようなシステムを構築したいのでご教授お願いします。 違うシステム同士でデータを利用する際、同じ使用用途でもシステムによって名称が異なる場合にも対応できるシステムを課題としています。 また、DOM方式を利用した方法だと助かります。 環境はXP、PHP5、Apache2.0です

    • ベストアンサー
    • PHP
  • XMLを動的に読む

    ワードプレスなどで行われているPHP⇔MYSQLのような動きを、javascript⇔XMLでやりたいです。 具体的に言うと、 index.htmlでボタンAを押されるとdata.xmlのA情報がindex.htmlに表示される index.htmlでボタンBを押されるとdata.xmlのB情報がindex.htmlに表示される というものです。 Ajaxなど調べているのですが、なかなかいい情報が見つかりません。 てってきたいのはテキスト情報だけですので、なるべくシンプルで簡単なコードが知りたいのですが、複雑な部分が多くて困っています。 簡単なやり方が紹介されているサイトや簡単なサンプルを見せてもらえるととても助かります。

  • XMLとかで出来ますか?

    XMLもXSLもXSLTも何も知らないので出来るのかわかりませんが。 Aに1・2という情報?属性?を付けて Bに2・3を付けて Cに1を付けて 1が付いているのはA・C 2が付いているのはA・B 3が付いているのはB というように表示するにはどうすればいいでしょう?

    • 締切済み
    • XML
  • PHP ”XML_unserialize”でXMLを配列に変換したのですが・・・

    XMLファイルを配列としてとってこれる XML_unserializeというライブラリを使用して XMLファイルに含まれるデータをとってPHPで利用することが できたのですが、ここで一つ大きな問題が発生しました。 XML_unserializeをつかうと <XMLTAG>  取り出したいデータ </XMLTAG>      ↓ array(  [XMLTAG] = 取り出したいデータ ) と、たしかに取り出したいデータを配列に変換することができます。 しかし、取り出したいデータの中にタグが含まれていた場合 例えば <XMLTAG>  <div>取り出したいデータ</div> </XMLTAG> とかになっていると <div>もXMLと判断されてしまって 必要なデータがうまくとってこれないのです。 正規表現でエスケープさせるにしても数が膨大ですし、 XMLタグ名に実際にHTMLで使われている タグ名が使われているとも限りません。 どうすれば、 ”XMLの中に入っているHTML等のタグを含むデータ”をうまくとってくることが できるのでしょうか?

    • ベストアンサー
    • PHP
  • XMLへDOMでタグの追加

    次のようなXMLにDOMで、タグを追加しようとしているのですが、 追加される場所が思った所に追加されません。 正常XMLにようにしたいのですが、どうすれば良いでしょうか? --元XML----------------- <root> <item>a</item> <item>b</item> </root> --結果XML----------------- <root> <item>a</item> <item>b</item> <info>xxxx</info> </root> --正常XML----------------- <root> <info>xxxx</info> <item>a</item> <item>b</item> </root> -- プログラム ---------------- MSXML::IXMLDOMDocumentPtr xmlDoc = NULL; MSXML::IXMLDOMNodeListPtr pNodes; MSXML::IXMLDOMNodePtr pNode; MSXML::IXMLDOMElementPtr pElem; xmlDoc.CreateInstance ("Msxml2.DOMDocument"); xmlDoc->load( ファイル名 ); pNodes = xmlDoc->selectNodes(L"/root"); pNode = pNodes->Getitem(0); pElem = xmlDoc->createElement(L"info"); pNode->appendChild( pElem ); 環境:WinXP+IE7+VC6

    • ベストアンサー
    • XML