2012-04-02 21 views
2

私はXMLの文字列<italic>a</italic>を持っていますが、このパターンですべてのイタリック語を抽出するにはxsl:analyze-stringを使用しています:"<italic>a</italic>"。私はイタリック体でテンプレートマッチを使うことができますが、ここでの要件は正規表現を使ってマッチさせることです。私は(<italic>)[a-z]+</italic>のような表現を書こうとしていますが、XSLTプロセッサはオープニング<タグでエラーを投げています。xsltの正規表現で "<" and ">"を扱う方法

どのように正規表現の開始タグと終了タグを処理するか?

+0

http://stackoverflow.com/a/1732454/338803 – sje397

+0

'CDATAまたはそうでなければ(' < '/' >を ')エスケープ'ですか?プロセッサーがそれを文字列として認識していますか? –

+0

私は(\ <)(イタリック)(\ >))[a-z +](\ <)(イタリック)(\ /)(\ >)ですが、同じ結果です... xslt throwing error ... – atif

答えて

0

<italic>a</italic>はsaxon xsltプロセッサを使用している場合は、拡張機能net.sf.saxon.serializeを使用してXMLをシリアライズし、正規表現を適用します。それは素晴らしい作品です。

1

<italic>a</italic>が実際の文字列である限り、<文字には&lt;を使用できます。より大きい(>)はエスケープする必要はありません。

例:

サンプルXML入力

<test><![CDATA[<italic>a</italic>]]></test> 

XSLT 2.0

<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
    <xsl:output indent="yes"/> 
    <xsl:strip-space elements="*"/> 

    <xsl:template match="node()|@*"> 
    <xsl:copy> 
     <xsl:apply-templates select="node()|@*"/> 
    </xsl:copy> 
    </xsl:template> 

    <xsl:template match="/"> 
    <xsl:analyze-string select="test" regex="&lt;italic>([^&lt;]+)&lt;/italic>"> 
     <xsl:matching-substring> 
     <results> 
      <xsl:value-of select="regex-group(1)"/> 
     </results> 
     </xsl:matching-substring> 
    </xsl:analyze-string> 
    </xsl:template> 

</xsl:stylesheet> 

XML出力:

<results>a</results> 
+0

このコードは、たとえばCDATA自体にパターンを置くと読みやすくなります。 'で' <![CDATA [([^ <])]]>

+0

私はDevNullに同意しますが、あなたの正規表現に若干の誤りがあります。正しい正規表現は: regex = "< italic>([^ <] +)</italic> " キャプチャされたマークアップ(私が正しく理解している場合)が複数の文字である可能性があるので、余分なプラスがあります質問は複数の文字を含める"斜体 "を指定します –

+0

@ SeanB.Durkin - 良いキャッチ!私は正規表現を更新しました。 –

3

あなたのXMLソースがどのようなものかはっきり言っていませんが、<italic>a</italic>が普通のXML要素の場合、正規表現を使用して要素の字句形式を照合することはできません。これは、のXSLTへの入力が、ノードのツリーであり、字句のXMLマークアップの文字列ではないからです。このコンセプトは、XSLTの仕組みを理解する上で極めて重要です。

+0

は文字列ではない通常のxml要素で、net.sf.saxon.serialize関数を使用してxmlをシリアル化してから正規表現を適用することでsaxon xsltプロセッサで使用できます。それはgreateの働きをします。 – atif

関連する問題