2012-02-16 12 views
0

現在のアドレス文字列を別のものに置き換える必要があるwsdl(Webサービスから取得したもの)があります。その考え方はXSLTを使用していました。ただ1つの問題があります。私はXSLTで何もしていないので、どうやってそれを行うのか分かりません。私はそれを行う方法の簡単な例を発見したが、私はどのように私はそれを置き換えることができますwsdlから古い文字列を取得します。ここでXSLTで文字列を置き換えます

ある
<?xml version="1.0" encoding="UTF-8"?> 
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:inm="http://www.inmagic.com/webpublisher/query" version='1.0'> 
    <xsl:output method="text" encoding="UTF-8"/> 

    <xsl:preserve-space elements="*"/> 
    <xsl:template match="text()"></xsl:template> 

    <xsl:template match="test"> 
    <xsl:apply-templates/> 

    <xsl:for-each select="testObj"> 
     'Notes or subject' <xsl:call-template name="rem-html"><xsl:with-param name="text" select="SBS_ABSTRACT"/></xsl:call-template> 
    </xsl:for-each> 
    </xsl:template> 

    <xsl:template name="rem-html"> 
    <xsl:param name="text"/> 
<xsl:variable name="newtext" select="translate($text,'a','b')"/> 
    </xsl:template> 
</xsl:stylesheet> 

UPDATE:

が、これは私が今持っているものです。

<soap:address location="http://localhost:4434/miniwebservice"/> 

は、これは私が取得したいものです。

<soap:address location="http://localhost:4433/miniwebservice"/> 

私はちょうど番号を置き換えた港の4434からXSLTには組み込みの文字列を置換する機能がないことを4433

+0

入力XMLドキュメントの例と取得したい出力を投稿してください。 – penartur

+0

@penartur done、質問を更新 – Kiesa

答えて

1
<xsl:template match="soap:address/@location"> 
    <xsl:attribute name="location"> 
     <xsl:call-template name="string-replace"> 
      <xsl:with-param name="haystack" select="current()"/> 
      <xsl:with-param name="search">:4434/</xsl:with-param> 
      <xsl:with-param name="replace">:4433/</xsl:with-param> 
     </xsl:call-template> 
    </xsl:attribute> 
</xsl:template> 

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

注に、あなたはどこか別の場所にそれを取る必要があります(例えば、このスタイルシートを書くときはhttp://symphony-cms.com/download/xslt-utilities/view/26418/が使われました)。 XSLT 2.0で正規表現使用して続行する簡単な方法があること

+0

私はちょうどidを試して、あなたの提案に "例"のコメントを置き換えましたが、私はそれを実行しようとすると例外が発生します:スタイルシートをコンパイルできませんでした。 1エラーが検出されました。 – Kiesa

+0

私はmatch = "soap:address/@ location"をいくつかのランダムなテキストに置き換えてコンパイルしましたが、テキストを置き換えずに少なくともコンパイルしました – Kiesa

+0

あなたの ''に 'soap'ヘッダ;さもなければ、 'soap'名前空間のノード/属性を参照することはできません。 'xmlns:soap'属性の値をソースファイルのルートノードから' 'にコピーするだけです。 – penartur

0

注:それを動作させるために

<?xml version="1.0" encoding="UTF-8"?> 
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:soap="..." 
    version="2.0"> 
    <xsl:param name="newPort">4433</xsl:param> 
    <xsl:template match="@*|node()"> 
     <xsl:copy> 
      <xsl:apply-templates select="@*|node()"/> 
     </xsl:copy> 
    </xsl:template> 
    <xsl:template match="soap:address/@location"> 
     <xsl:attribute name="location"> 
      <xsl:value-of select="replace(., 
       '^(http://[^/]*:)[0-9]{4}/', 
       concat('$1',$newPort,'/'))"/> 
     </xsl:attribute> 
    </xsl:template> 
</xsl:stylesheet> 

を、あなただけの石鹸名前空間URIにxmlns:soap="..."に名前空間URIを変更する必要があります(私は」 XSLT 2.0プロセッサ(例:saxon)を使用してください。

関連する問題