2017-11-28 7 views
0

xslt 2.0スタイルシートを使用しているときに、XHMTLファイルをXMLに変換する際に問題があります。私は質問がXSLT 1.0について答えられたことを知っていますが、実際にはXSLT 2.0では機能しません!Oxygen XMLエディタでXSLT 2.0を使用してXHTMLをXMLに変換する方法は? XSLT 1.0の解決策が機能しない

例XHTMLファイル:

<?xml version="1.0" encoding="iso-8859-1"?> 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html lang="de" xml:lang="de" xmlns="http://www.w3.org/1999/xhtml"> 
    <head> 
    <meta name="something" content="content"/> 
    (...) 
    </head> 
    <body onload="..."> 
    (...) 
    </body> 
</html> 

例スタイルシート:

<?xml version="1.0" encoding="UTF-8"?> 
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:xhtml="http://www.w3.org/1999/xhtml"> 
<xsl:template match="xhtml:html/xhtml:head">  
    <section role="example"> 
     <xsl:attribute name="id" select="concat('something', meta[@name='something']/@content)"/>  
     (...) 
     </section> 
</xsl:stylesheet> 

私は、ノードを呼び出すことができないんです。私は酸素XMLエディタを使用しています(古いバージョンは残念ですが、すべてのXML変換でうまくいきました)、別のプロセッサ(Saxon-EE 9.4.0.6、Saxon HE 9.4.0.6、Saxon-PE9.4.0.6)を試しました。私はこの問題XHTML to XML XSLT conversion which makes reference to XSLT 2.0を見て、アスタリスクにマッチする名前空間を置き換えようとしましたが、エディタはそれを受け入れませんでした。この小さな変更はトリックをした

<?xml version="1.0" encoding="UTF-8"?> 
<xsl:stylesheet version="2.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="xhtml:html/xhtml:head">  
    <section role="example"> 
     <xsl:attribute name="id" select="concat('something', xhtml:meta[@name='something']/@content)"/> 
     (...) 
     </section> 
</xsl:stylesheet> 

は@MartinHonnenから貴重なコメントの後、私はにXSLTを変更しました。あらゆる種類のメタ情報をXHTMLから抽出できるようになりました。前のスタイルシートを結果XMLに含めると、id属性の値として "something_"が埋め込まれていました。これは修正されたスタイルシートと短い結果の一例である:再び

<?xml version="1.0" encoding="UTF-8"?> 
    <section role="example" id="something_content"> 
     (...) 
    </section> 

感謝!!!!

+0

"ノードを呼び出すことができません"とはどういう意味ですか?あなたが望む結果と、oXygenがあなたに与える結果、または正確なエラーメッセージを投稿してください。一般的には、名前空間で作業する場合、それらを一貫して使用する必要があります。したがって、 'meta'パスは' xhtml:meta'でなければなりません。 –

+0

あなたのコメントをありがとう@MartinHonnen。私はmetaをxhtml:metaに変更し、それはうまくいった。私は他の問題から、それをマッチアトリビュート値でのみ追加しなければならないことを理解しました。これは実際に私の質問に実際に答えました。どういたしましてあなたに投票できますか?私はXSTLに修正を追加し、結果の例を問題の説明に追加します。 – rena

+0

私はXSLT 2以降で名前空間内の要素を照合して選択する作業を簡単にするための提案とともに、前のコメントの提案を回答として追加しました。 –

答えて

1

名前空間で作業する場合は、一貫して使用する必要があるため、metaのXHTML meta要素を選択するには、xhtml:metaが必要です。

XSLT 2以降では、xsl:stylesheetxpath-default-namespace="http://www.w3.org/1999/xhtml"を使用して簡単にすることができます。 match="html/head"select="meta"という接頭辞を使用する必要はありません。

+0

素晴らしい!さらなるヒントをお寄せいただきありがとうございます! – rena

関連する問題