0

XSL を使用して、いくつかの HTML ファイルを独自の XML 形式に変換しようとしています。

この目的のために、HTML Tidy を使用して入力ファイルをクリーンアップし、それらを html2xhtmlでxhtmlに変換してから、msxslで xsl スクリプトを使用して xhtml ファイルを独自の形式に変換します。

ただし、最後のステップは失敗し、エラー メッセージはまったく表示されません (これは意味論的な失敗であり、技術的なものではありません ;-)): My output file just contains empty tags .

以前にこのような問題があり、html タグから xmlns 属性を削除しました。これにより、ほぼすべてのオンライン トランスフォーマーがファイルを正しく処理できるようになりました。MSXSL は、次のエラー メッセージを書き込むようになりました:「DTD での既定の名前空間宣言属性の使用はサポートされていません」。

ここで使用するファイルを見つけてください: http://pastie.org/5483087

前もって感謝します!

4

1 に答える 1

1

それは XSLT と XPath 1.0 に関する FAQ です。入力 XHTML ドキュメントの要素は名前空間にあり、XSLT はそれを考慮していません。たとえば、次のように変更する必要があります

<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xhtml="http://www.w3.org/1999/xhtml"
exclude-result-prefixes="xhtml">
<xsl:template match="/">

  <stellenausschreibung>
    <hochschule><xsl:value-of select="//xhtml:div[@id='contentText']/xhtml:img/@alt" /></hochschule>
    <anbieter><xsl:value-of select="//xhtml:p[@id='ad_employer']" /></anbieter>
    <typ><xsl:value-of select="//xhtml:h1" /></typ>
    <bewerbungsschluss><xsl:value-of select="//xhtml:span[@id='ad_bewerbungsschluss']" /></bewerbungsschluss>
    <erscheinungsdatum><xsl:value-of select="//xhtml:span[@class='job_published_at']" /></erscheinungsdatum>

    <inhalt><xsl:value-of select="//xhtml:p[@id='ad_job']" /></inhalt>
  </stellenausschreibung>

</xsl:template>
</xsl:stylesheet>

スタイルシートで使用される XHTML 名前空間のプレフィックス (私の例ではxhtml) はもちろん自由に選択できますが、XSLT/XPath 1.0 のように名前空間のない要素を//p常に選択するなどのパスを使用する必要があります。p

于 2012-12-05T10:22:53.207 に答える