XMLDocument.LoadXmlでスキーマを無視して取得
- XMLDocument.LoadXmlを使用して、XML文字列を読み込む方法について質問しています。
- DBに格納されたデータを文字列に変換し、XML文字列の要素を階層を維持したままDataSetやHashTableに格納したいとのことです。
- 既存のXML操作にはXmlReadMode.InferSchemaが利用できますが、XML文字列から値を取得するためにXMLDocumentを使用している中で、スキーマを無視して要素を取得する方法を探しています。
- ベストアンサー
XMLDocumentでスキーマを無視して取得
XMLDocument.LoadXmlを使用して、XML文字列を読み込もうとしています。 ■以下のことを行おうとしています。 1.DBに格納されたデータ(Byte配列)をStringの文字列に変換。 ※文字列にする理由…ディスク領域にファイル出力などは行わずに行いたい為。 2.XML文字列の要素(タグ)を<HOGE>~</HOGE>の構造を階層を維持したまま DataSetや、HashTableに格納したい。 例) <?xml version="1.0" standalone="yes"?> <xs:schema id="testDataSet" xmlns="" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata"> <HOGE> <TEST1> <SUBTEST1>あいうえお</SUBTEST1> </TEST1> <TEST2> <SUBTEST2>かきくけこ</SUBTEST2> </TEST2> </HOGE> ※2行目の<xs:schema~のスキーマ部分は無視して、HOGEブロック内だけの要素を取り出したい。 ※また格納したDatasetなどから、SUBTEST1などの要素名を指定して 「あいうえお」の値を取得したい。 ■対応 上記を実現するために、XMLDocument.LoadXMLを使用しました。 XMLDocument.LoadXML(★上記の例の文字列をString変数に格納しで指定★) ですが、上記のようにすると 「ルート要素が見つかりません」旨のエラーが出て煮詰まっております。 DataSetのReadXML等だと、XmlReadModeなるものが使用でき、 ReadXMLに引数としてXmlReadMode.InferSchemaを指定すると、 インラインスキーマを無視した要素取得ができるようですが、 今回はXML文字列からの値取得が大前提の為、XMLDocumentを使用している次第です。 XMLDocumentでも、DataSet.ReadXMLのようにスキーマ部分を無視して、 XML文字列を何らかの配列に格納し、要素検索ができる形を行いたいです。 XML文字列をString変数に格納後に、スキーマ部分だけ除外して読み込む方法も考えたのですが XMLの構造体が常に例と同じ構造で来る訳ではないので、文字列操作ではなく XMLDocument「スキーマを読まないで要素を取得する方法」があればと思い投稿しました。 自身でもあと1日調査する猶予があるのですが、残された時間が時間の為 何か少しでも良い方法や案をご存知の方おられましたら、 ご教授願いますでしょうか。 よろしくお願いいたします。
- -0-y
- お礼率75% (59/78)
- XML
- 回答数1
- ありがとう数22
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
XMLDocument.LoadXMLに先立って、正規表現でも使ってスキーマの行を削除してしまえばいいのでは? それ以前に、スキーマのとおりにXML文書が作られていないところに問題があると思いますが。
関連するQ&A
- XMLからデータセットへ
こんにちは 初めての質問です。 今XML形の文字列があります。 string strXML = @" <dataset1> <table1> <column1>a</column1> <column1>b</column1> <column1>c</column1> <column1>d</column1> <column1>e</column1> <column1>f</column1> </table1> </dataset1>"; この文字列をXMLファイルとして保存します。 XmlDocument xml = new XmlDocument(); xml.LoadXml(strXML); xml.Save(@"C:\test.xml"); 保存したXMLファイルをデータセットで読み込みます。 DataSet ds = new DataSet(); ds.ReadXml(@"C:\test.xml"); 以上の流れでデータセットの作成はできますが、 一回XMLファイルを保存しないといけません。 何とか保存しないで、文字列から直接データセットを生成する方法はありますか? よろしくお願いします。
- ベストアンサー
- XML
- XMLスキーマのrefの使い方
こんにちは。yukimura1024です。 以下のXMLスキーマなんですが「Aの下にBを置ける」という意味でrefを使っています。 しかしこの書き方では「ルート要素としてAもBも使える」という意味でも解釈されてしまいます。 これをrefを使いつつ「Aの下にBを置ける」けど「ルート要素はAのみ」とするにはどう書けばいいでしょうか? <?xml version="1.0" encoding="UTF-8"?> <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"> <xs:element name="A"> <xs:complexType> <xs:sequence> <xs:element ref="B"/> </xs:sequence> </xs:complexType> </xs:element> <xs:element name="B"> <xs:complexType> <xs:sequence> <xs:element name="C" type="xs:string"/> </xs:sequence> </xs:complexType> </xs:element> </xs:schema> アドバイスいただける方いましたらお願いします。
- 締切済み
- XML
- SQL ServerのXMLスキーマがうまくいきません。
「SQL Server 2005 Express」を使用しています。 次のようなスキーマをサーバーに登録して CREATE XML SCHEMA COLLECTION dbo.schema_test AS N'<?xml version="1.0" encoding="UTF-16"?> <xsd:schema targetNamespace="http://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelManuInstructions" xmlns:xsd="http://www.w3.org/2001/XMLSchema" > <xsd:element name="root"> <xsd:complexType mixed="true"> <xsd:choice> <xsd:element name="A" type="xsd:string" /> <xsd:element name="B" type="xsd:string" /> <xsd:element name="C" type="xsd:string" /> </xsd:choice> </xsd:complexType> </xsd:element> </xsd:schema>' ; つぎのようなクエリを試したのですが、 「メッセージ 6913、レベル 16、状態 1、行 5 XML 検証: 要素 'root' の宣言が見つかりませんでした。場所: /*:root[1]」 というエラーメッセージが表示されてしまいます。 DECLARE @xml xml (dbo.schema_text) SET @xml = '<root> <A>AAA</A> <B>BBB</B> <C>ooo</C> </root> ' どなたか分かる方がいらっしゃいましたら、 アドバイスをお願いいたします。
- 締切済み
- SQL Server
- XMLファイルからXML Schemaを参照する方法?
XMLファイルの設計をしています。 今まではDTDを使っていたのですが、 勉強するとXML SchemaのほうがXMLの規則にそっていたり、 データ型が多かったりして都合が良い面があると学びました。 そこでXML Schemaを使いたいと思うのですが、 XML SchemaとメインのXMLのファイルはどのように関係させたら良いのでしょうか? DTDのときは以下のように書いていたと思います。 <!DOCTYPE root SYSTEM "sample.dtd" > このような記述をXML Schemaのときには、どのように記載するのだろうと 疑問に思いました。 私なりに調べてみたのですが、 XML Schemaの記述方法は、大まかに理解したのですが、 関係方法をどうすれば良いかは、見つけられませんでした。 本を読んでも、書かれているように思えません。 以下の2つのファイルがあった場合、 【element1.xml】は妥当なXML文書だそうですが、 どのように関連付いているのでしょうか? 【element.xs】 <?xml version="1.0" encoding="Shift_JIS" ?> <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"> <!-- 要素宣言 --> <xs:element name="売上高" type="xs:integer" /> </xs:schema> 【element1.xml】 <?xml version="1.0" encoding="Shift_JIS" ?> <売上高>1000</売上高> もしよろしければ、教えて頂けませんか? ぜひご教示お願いいたします。
- ベストアンサー
- XML
- 不特定ノードに出現する同じタグ要素の中身を置換して保存したい
ある特定のタグ要素(例:hoge)がXML内のどこに現われるかわからないとき、それらの要素の中身を置換して、元のXMLと同じ構造を保ったまま保存したいと考えています。 XPathを使って//hogeと指定すればnodeListが抽出できますが、それらのrootNodeからの絶対パスを知る方法があればよいのですが。。。 当方DOMとXSLTを多少かじった程度で、SAXについては全くわかりませんが、どんな方法でもよいので実現できる方法があったらどなたかご教授くださいませ。 <?xml version="1.0" encoding="Shift_JIS"?> <root> <hoge>変換前文字列1</hoge> <aaa> <hoge>変換前文字列2</hoge> </aaa> <bbb> <ccc> <hoge>変換前文字列3</hoge> </ccc> <hoge>変換前文字列4</hoge> <hoge>変換前文字列5</hoge> </bbb> </root> 上記のようなXMLを下記のように変更したい。 <?xml version="1.0" encoding="Shift_JIS"?> <root> <hoge>変換後文字列1</hoge> <aaa> <hoge>変換後文字列2</hoge> </aaa> <bbb> <ccc> <hoge>変換後文字列3</hoge> </ccc> <hoge>変換後文字列4</hoge> <hoge>変換後文字列5</hoge> </bbb> </root>
- ベストアンサー
- XML
- XML Schema
いつもお世話になっております。 わからないところがありますので教えてください。以下のXML Schemaで、 <xs:element ref="No" /> と参照しているのですが、参照先となるのは <xs:element ref="No" type="xs:NoType" /> だと思うのですが、自分はこれが <xs:element name="No" type="xs:NoType" /> ではないのかなって思っているのですが、どうなのでしょうか。 よろしくお願いします。 <?xml version="1.0" encoding="Shift_JIS"?> <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"> <xs:element name="Conference" type="ConferenceType" /> <xs:complexType name="ConferenceType"> <xs:sequence> <xs:element name="Room" type="xs:string" /> <xs:element ref="No" /> </xs:sequence> </xs:complexType> <xs:element ref="No" type="xs:NoType" /> <xs:simpleType name="NoType"> <xs:restriction base="xs:float"> <xs:minExclusive value="10" /> <xs:maxExclusive value="15" /> </xs:restriction> </xs:simpleType> </xs:schema>
- ベストアンサー
- XML
- targetNamespaceは不要?
xmllint.exeを使い、XML Schemaの動作実験をしています。 が、下記 XML Schemaでどうしてもエラーが出て頓挫しています。 その解決方法を伺っても宜しいでしょうか? エラーの具体的な内容は、TestElement要素の型がおかしいとの事した。 <?xml version="1.0" encoding="UTF-8" ?> <xsd:schema version="1.0" xmlns:xsd="http://www.w3.org/2001/XMLSchema" targetNamespace="test_namespace"> <xsd:simpleType name="MyByte"> <xsd:restriction base="xsd:byte"/> </xsd:simpleType> <xsd:element name="TestElement" type="MyByte"/> </xsd:schema> 尚、targetNamespace属性を除去するとエラーが出なくなります。が「この属性は使うべき」とあるHPに書いてあった為、困っております。 どうか宜しくお願い致します。
- ベストアンサー
- XML
- 要素の内容にxmlを入れたい
次のようなxmlを作成しました。 <?xml version="1.0" encoding="UTF-8"?> <tns:StateChange xsi:schemaLocation="http://sample.com/Change.xsd" xmlns:tns="http://sample.com/XSDDefinition" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <ServiceName>test</ServiceName> <wsdl></wsdl> </tns:StateChange> wsdl要素の内容として <?xml version="1.0" encoding="utf-8\"?><wsdl:definitions xmlns:s="http://www.w3.org/2001/XMLSchema".... といったいわゆるWSDLを文字列として指定したいと考えて、指定するとvalidate時にエラーになってしまいます。 xmlを要素の内容にしたい場合、どのようにすればいいのでしょうか?
- ベストアンサー
- XML
- PHP URL→HTML→取得→RSS出力
PHP URL指定→HTMLソース→指定タグ要素取得(複数)→RSS(.xml)出力について URLからHTMLソースを取得し、要素を取得しRSSファイルを作りたいと思っています。 例えば、http://shopping.yahoo.co.jp/ranking/のURLのHTMLソース内から <p class="elPhoto"> <a href="○○○.html"> <img src="【取得したい文字列1】" width="200" height="200" alt="○○○"> </a> </p> <h4 class="elTitle"> <a href="【取得したい文字列2】">【取得したい文字列3】</a> </h4> <h4 class="elPrice"> <span>【取得したい文字列4】</span>円 </h4> <p class="elSellStatus"></p> <h4 class="elStore"> ストア:<a href="【取得したい文字列5】">【取得したい文字列6】</a> </h4> など指定する各要素を全件取得し、 <item> <title>【取得したい文字列3】</title> <link>【取得したい文字列2】</link> <description> 【取得したい文字列1】<br> 【取得したい文字列4】<br> 【取得したい文字列6】<br> 【取得したい文字列5】 </description> </item> などとRSSで全件出力し、xmlファイルを作成したいです。 アドバイス、ご指導お願いします。
- 締切済み
- PHP
- フルパスからファイル名取得をしたい
たとえば http://hoge.com/hoge.php とあった場合、そのhoge.phpの中で"hoge"という文字列 を取得したいのですが。。。 どうやればいいでしょうか? よろしく願いします。
- ベストアンサー
- PHP
お礼
ありがとうございます。
補足
> 正規表現でも使ってスキーマの行を削除 ありがとうございます。上記の方法も検討してみます。