アプリ版:「スタンプのみでお礼する」機能のリリースについて

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日調査する猶予があるのですが、残された時間が時間の為
何か少しでも良い方法や案をご存知の方おられましたら、
ご教授願いますでしょうか。

よろしくお願いいたします。
 

A 回答 (1件)

XMLDocument.LoadXMLに先立って、正規表現でも使ってスキーマの行を削除してしまえばいいのでは?


それ以前に、スキーマのとおりにXML文書が作られていないところに問題があると思いますが。

この回答への補足

> 正規表現でも使ってスキーマの行を削除

ありがとうございます。上記の方法も検討してみます。

補足日時:2013/10/14 21:07
    • good
    • 0
この回答へのお礼

ありがとうございます。

お礼日時:2013/10/14 21:07

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!