2016-05-17 15 views
2

プログラムでpptxファイルを作成しようとしています。しかし、pptxファイルを開こうとすると、LibreOfficeとMicrosoft PowerPointから非常に一般的なエラーが表示されます。より具体的なエラー情報を得るために、どうやって基礎XMLで間違っているのかを知ることができますか?Open Office XML解析エラー

私はこれらのファイルを作成するためにPHPを使用していますが、途中でMicrosoftのスタックには何もありません。

+0

[OpenXML Productivity Tool](https://www.microsoft.com/en-gb/download/details.aspx?id=30425)をダウンロードし、[検証]オプションを選択することができます。 XMLのエラーをリストする必要があります。 – petelids

+0

@petelids残念ながら、私はUbuntuマシンを使用しています。 SDKをインストールするには、Windowsマシンが必要です。それが本当に唯一の解決策であれば、私が想定しているWindowsマシンに手を差し伸べることができますが、私の開発マシン上で実行される解決策が間違いなく望ましいでしょう。 – thatidiotguy

+0

ああ、それは助けになりません:)。 MonoでOpenXML SDKを使用し、[OpenXmlValidatorクラス](https://msdn.microsoft.com/en-us/library/bb497334(v=office.15).aspx)を使用できますか? – petelids

答えて

1

OpenXML Productivity Toolには、発生する可能性のあるエラーをリストする検証アクションがあります。 2007年、2010年、または2013年の形式に対して検証するかどうかを選択できます。

次は、私は、行の外に余分な電池要素を追加した例です。

enter image description here

ツールはまた、既存の文書からコードを生成できるようにする便利な機能を持っています。これは、特定の機能を生成する方法に固執している場合、非常に便利です。

+0

ねえ、簡単な質問です。どのようにしてpptxファイルをXMLバリデーターで実行してもエラーは発生しませんが、Powerpointでファイルを開くと、まだ修復が必要な問題があることがわかりますか? – thatidiotguy

+0

@ tatidiotguy - 1)をチェックする価値があるものは、バリデーター上で正しいバージョンを使用していますか? 2)要素の順序は正しいですか?私はこの問題を思い出し、要素発注の問題であることが判明しました。 3)私は2)を間違って思い出しているかもしれませんが、実際にはパワーポイントでは必要ですが、バリデーターでは必要ではない要素がありますか? – petelids

+0

ポインタをありがとう。私はそれらの可能性を調べます。私が作成したpptxファイルのXMLを、PowerPointが作成するXMLの "修復済み"と比較する良い方法はありますか? – thatidiotguy

1

Standard ECMA-376からOOXML PresentationML XSD、pml.xsdをダウンロードしてください。あなたはファイル内のECMA-376 4th edition Part 1というリンクのジップで見つけることができます。

Xercesや他の標準を使用すると、生成するOOXMLが無効な場合に、XMLパーサーの検証で良好な診断メッセージが提供されるはずです。

+1

これは、個々のファイルに問題がある場合、その問題がXMLファイル間に定義された関係の場合はどうなるでしょうか? '_rels'フォルダにある私のXMLファイルの問題など?また、LibreOfficeが期待しているファイルがない場合はどうしたらいいですか?それでも、私は文法上の誤りがないことを確かめるのに、間違いなく便利です。 – thatidiotguy

+0

フラットなOPCに変換し、FOPC XSDを使用すると助けになりますが、残念ながら私はFOPCのためのどのようなタイプのXMLスキーマも定義していないと考えていました。私は、主なXMLの検証は、あなたが言うように完全ではありませんが、しばしば非常に役立つと信じています。 – kjhughes

+0

実際に検証プロセスを実行することを認識しているLinux上のツールについて知っていますか?理想的には、解凍されたpptxディレクトリを指すことができ、それは再帰的に処理されます。 – thatidiotguy