問題タブ [stax]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
java - JAVA: XmlStreamReader を使用して xml タグのバイト オフセットを収集する
XMLStreamReader を使用して xml タグのバイト オフセットを正確に収集する方法はありますか?
ランダム アクセスが必要な大きな xml ファイルがあります。すべてをデータベースに書き込むのではなく、XMLStreamReader を使用して 1 回実行し、重要なタグのバイト オフセットを収集してから、RandomAccessFile を使用して後でタグの内容を取得できるようにしたいと考えています。
XMLStreamReader には、文字オフセットを追跡する方法がないようです。代わりに、読み取られたバイト数を追跡するリーダーに XmlStreamReader をアタッチすることをお勧めします (たとえば、 apache.commons.ioによって提供される CountingInputStream )。
例えば:
残念ながら、上記のコードは複数のタグに対して同じバイト オフセットを出力するため、何らかのバッファリングが行われているに違いありません。xml ファイルのバイト オフセットを追跡するより正確な方法はありますか (理想的には、適切な xml 解析を放棄することはありません)。
java - 既存の XML ドキュメントにノードを追加する方法
私は自分のドキュメントを解析するためにstaxを使用しています.これは私のXMLドキュメントのダミーの例です:
n 番目の本の後にノードを挿入するにはどうすればよいですか (n は任意の数字です)。ありがとうございました
java - Staxmate API のインデントの問題
Staxmate API を使用して XML ファイルを生成しています。チュートリアルを読んだ後: http://staxmate.codehaus.org/Tutorialコードを変更してみました。最後に私は呼び出しを追加しました
これにより、新しく生成された XML ファイルが空になります。このメソッドを呼び出さないと、XML ファイル全体が期待どおりに生成されます。
プロジェクトのセットアップで怪しいものを疑って、チュートリアルで指定されたコードを使用して、同じパッケージに Test クラスを作成しました。
コードからメソッドを呼び出してmain(String)
も問題は解決しませんが、クラス Test をそのまま実行するとスムーズに動作します。私のコードには、データベースの初期化とその他の製品固有のアクションが含まれています。
道に迷っています。これをどのように進めるべきかについて何か考えはありますか?
java - JavaでXMLファイルをCSVに変換する
@Before おそらく重複した質問の提案がいくつかあると思いますが、最初にこれを読んでください。できるだけ簡潔にしようと思います。タイトルは基本的な考え方を示しています。
XML の例を次に示します (ケース 1) :
XML の例を次に示します (ケース 2) :
この XML は Google から借用しましたが、私のオブジェクトは常に同じであるとは限りません。ここで、両方のケースから次のような CSV を生成したいと思います。
この 1 行目はヘッダーで、csv にも含める必要があります。今日、スタックスへの便利なリンクをいくつか手に入れました。これに対する正しい/最適なアプローチが何であるかは本当にわかりません.3日間これに苦労していますが、まだあきらめたくありません.
この問題をどう解決するか教えてください
これは最大1GBの非常に巨大なxmlファイルであることを忘れていました
報奨金の更新:
私はより一般的なアプローチを探しています。つまり、これは任意の深さの任意の数のノードで機能する必要があり、xml の例のように、あるitem
オブジェクトのノード数が次/前のオブジェクトよりも多い場合があるため、その場合にも当てはまります(したがって、すべての列と値が CSV で一致します)。
また、ノードの名前/ローカル名が同じで、値と属性が異なる場合もあります。その場合、新しい列が適切な値で CSV に表示されます。<averages>
(このケースの例をというタグ内に追加しましたcategory
)
java - 値を持つ要素のみの要素を取得する方法 Stax
xml などのテキストを持つ要素のみを取得しようとしています:
印刷する必要があります
このコードはルート、アイテムなども出力します。
不正な動作を編集:
テキストを持たないルートやその他のノードを印刷したくはありません。上で書いた出力だけです。ありがとうございました
java - sjsxp と wstx の両方がクラスパスにある場合の実装の選択方法
Axis2 は woodstox の wstx に依存していますが、私のプロジェクトの他の部分は sjsxp でかなりテストされており、同じテストを再実行する余裕はありません。ここで、axis2 を使用した SOAP メッセージの解析に問題があり、sjsxp を取り除けば問題はなくなります。axis2 に wstx 実装を使用し、プロジェクトの残りの部分をそのままにして sjsxp 実装を使用するように指示する方法はありますか?
scala - デプロイプロセス中のScala+staxコンパイルの問題
私はscala-ide(Eclipseプラグイン)でアプリを開発しました。エラーや警告はありません。今、私はそれをstaxcloudにデプロイしようとしています:
しかし、それをコンパイルすることはできません:
2つのエラーが表示され、不平を言っています。最初のエラーはFlickrUtilsクラスコンストラクターで、次のように定義されています。
2つ目は、Photoクラスに2つのフィールドがないという事実です。これは次のとおりです。
stax sdkが間違ったcomliler(?)を使用しているようです。どうすれば正しいものを使用できますか?そうでない場合、ここでの問題は何ですか、そしてそれを解決するためのいくつかの方法は何ですか?
編集: $ scala -version
言う
scalac
私はすべてを手動でコンパイルし、すべてをそれらの場所に配置し、stax deploy
その後実行してみました-同じ結果です。
java - W3スキーマに対してStax2検証APIをどのように使用する必要がありますか
XMLを生成するためにcom.ctc.wstx.stax.WstxOutputFactoryを使用しています。wstx-asl-3.2.4を実行しています
生成されたXMLをW3スキーマに対して検証し始める必要があります。
このようなorg.codehaus.stax2.validation.XMLValidationSchemaFactoryのインスタンスを作成すると
private final static XMLValidationSchemaFactory xsdFact=
XMLValidationSchemaFactory.newInstance(XMLValidationSchema.SCHEMA_ID_W3C_SCHEMA);
エラーが発生します
javax.xml.stream.FactoryConfigurationError:XMLValidationSchemaFactory実装クラスが指定されていないかアクセスできません(システムプロパティ'org.codehaus.stax2.validation.XMLValidationSchemaFactory.w3c'、または'META-INF / services /org.codehaus.stax2のサービス定義を介して)。 org.codehaus.stax2.validation.XMLValidationSchemaFactory.newInstance(XMLValidationSchemaFactory.java:208)at org.codehaus.stax2.validation.XMLValidationSchemaFactory.newInstance(XMLValidationSchemaFactory.java:98)のvalidation.XMLValidationSchemaFactory.w3c')
woodstoxにはDTDパーサーのみがバンドルされていることがわかります。 役に立たない指示が含まれているこの記事を見つけました
- 必要なタイプのスキーマを解析する方法を知っているXMLValidationSchemaFactoryのインスタンスを取得します(この例ではRelaxNG == rng)。
XMLSchemaValidationファクトリにボルトオンするために必要なビットが含まれているはずのSunMulti-SchemaXMLValidatorを見てきました。
com.sun.msv.reader.xmlschema.XMLSchemaReaderを使用 してXMLValidationSchemaFactoryの独自のインスタンスを記述し、このように機能させることができるようです。
私の質問は; 本当にこれを行う必要がありますか、それとも私が見つけられなかった既存のw3cスキーマファクトリがありますか?
おそらく、XMLを生成した後でXMLを検証する方が簡単でしょう。
これについての見解は何ですか?
java - XMLEventReader がマークアップを含む CHARACTERS イベントを報告するのはなぜですか?
私は XMLEventReader を持っています。これは、「UTF8」エンコーディングの XMLInputFactory から構築されています。「エンコーディング」属性が「UTF-8」に設定されているXMLファイルを読み取るために使用しています。
XML ファイルが Firefox で正しく表示されることを確認しました。ページのエンコードを見ると、UTF-8 と表示されています。
XMLEventReader を設定して、次のような文字イベントを合体させました。
XML ドキュメントに DTD がありません。有効です。
XMLEventReader は、CHARACTERS イベントを受信したことを時折報告します。その内容は (引用符を除いたもの) です。次に例を示します。
サンプルの末尾近くにマークアップ タグがあり、大文字のとげがあることに注意してください。文が切り取られていることにも注意してください。おそらく、このイベントの前に、文の先頭部分を含む別の CHARACTERS イベントがあったと思われます。
XMLEventReader が解析を台無しにするのはなぜですか? 文字が正しく表示されないのはなぜですか? XMLEventReader が CHARACTERS イベントを結合しないのはなぜですか? なぜ StAX は信じられないほど醜く予測不可能なのか?
Mac で Java ランタイム (Java 6) から提供された XMLEventReader を使用しています。
ここにいくつかのサンプル XML があります。もちろん、これは単にエディターからコピーしたものなので、その結果としてどのような文字変換が発生したかは誰にもわかりませんが、とにかく:
3 行目の「スマート アポストロフィー」に注意してください。
CHARACTERS イベントに反応し、その内容をスタック上の文字列に保存してから、「質問」という名前の END_ELEMENT イベントに反応して、これを読んでいます。question の END_ELEMENT イベントを受け取ると、先ほど説明した String の値を取得し、先ほど説明した文字列を入力として受け取る Java オブジェクトを作成します。
結果を System.out.println() すると、(ときどき) 前述の偽のジャンクが表示されます。
「UTF8」エンコーディング セットを使用して System.out を PrintWriter 内にラップすると、プラットフォームのエンコーディングに従って単純に文字を出力するのではなく、同じ結果が得られます。
java - sax の解析が dom の解析よりも速いのはなぜですか? そしてstaxはどのように機能しますか?
やや関連:Javaのlibxml2
はい、この質問はかなり長文です - 申し訳ありません。私は可能な限り高密度に保ちました。全体を読む前に簡単に確認できるように、質問を太字にしました。
sax の解析が dom の解析よりも速いのはなぜですか? 私が思いつくことができる唯一のことは、おそらくsaxを使用すると、受信データの大部分を無視しているため、気にしないxmlの部分を処理する時間を無駄にしないということです。IOW - SAX で解析した後、元の入力を再作成できません。 SAX パーサーがすべての xml ノードを考慮できるように (したがって、元のノードを再作成できるように) 記述した場合、DOM よりも高速ではないでしょうか?
私が尋ねている理由は、xml ドキュメントをより迅速に解析しようとしているからです。解析後にxmlツリー全体にアクセスする必要があります。サード パーティのサービスをプラグインするためのプラットフォームを作成しているため、xml ドキュメントのどの部分が必要で、どの部分が必要でないかを予測できません。入ってくるドキュメントの構造さえ知りません。これが、jaxb や sax を使用できない理由です。xml ドキュメントは小さく、一度に必要なメモリは 1 つだけなので、メモリ フットプリントは問題になりません。私を殺しているのは、この比較的小さな xml ドキュメントを解析するのにかかる時間です。以前にstaxを使用したことはありませんが、おそらく中間点である可能性があるため、さらに調査する必要がありますか? 私の理解が正しければ、 このように、元の解析時間は速いかもしれませんが、まだトラバースしていないツリーの部分をトラバースするように要求するたびに、処理が行われますか?
ほとんどの質問に回答するリンクを提供していただければ、私はあなたの回答を受け入れます (別の場所で既に回答されている場合は、私の質問に直接回答する必要はありません)。
更新: sax で書き直したところ、平均 2.1 ミリ秒でドキュメントが解析されました。これは、dom が取っていた 2.5 ミリ秒よりも改善 (16% 高速) ですが、私 (その他) が推測したほどではありません。
ありがとう