2017-10-13 14 views
0

URLパラメタをXMLに変換する可能性はありますか?私は、XPathで文字列をトークン化しようとしたURLパラメータからXMLへ

<root> 
    <firstName>John</firstName> 
    <lastName>Doe</lastName> 
    <birthDate>1970-01-01</birthDate> 
    ... 
</root> 

:私のようなXMLに文字列を変換したい

"firsteName=John&lastName=Doe&birthDate=1970-01-01&..." 

例、私はURL-Parmeterとの文字列を持っていますしかし、その結果は出動していない。

<Response> 
    <query> 
    firsteName=John&amp;lastName=Doe&amp;birthDate=1970-01-01  
    </query> 
</Response> 

と私はXMLで次のXPathを試してみました:

入力文字列は次のXMLである

fn:tokenize(/Response/query/, '&') 

XSLTやXPathので、これを行う方法はありますか?

+0

質問を編集して、既に試したコードを表示できますか?ありがとうございました。 –

+0

Linux OSの場合は簡単です – RomanPerekhrest

答えて

0

現在のXPathとトークン化が容易である。

tokenize($querystring,'&amp;') 

は、名前と値がsubstring-before($avs,'=')と `サブ-後($ AVS、「=」)を用いて抽出することができるのそれぞれから、文字列の配列を生成します。

返す要素を作成するには、XPathより強力なものが必要です。 XQueryでは、$querystringはあなたが解析したい文字列が含まれていることを考えると、次のことがしたいroot要素が返されます:

return element root { 
    for $avs in tokenize($querystring,'&amp;') 
    return for $name in substring-before($avs,'=') 
     return for $val in substring-after($avs,'=') 
       return element { $name } { $val } 
} 

をここでは要素コンストラクタは、純粋のXPath 3.0ではない唯一のものです。 XSLT(2.0または3.0)で

<xsl:element name="root"> 
    <xsl:for-each select="tokenize($querystring,'&amp;')"> 
    <xsl:variable name="name" select="substring-before(.,'=')"/> 
    <xsl:variable name="value" select="substring-after(.,'=')"/> 
    <xsl:element name="{$name}"> 
     <xsl:value-of select="$value"/> 
    </xsl:element> 
    </xsl:for-each> 
</xsl:element> 

XQueryとXSLTの両方があなたが」のスペルミスを修正しないで必要な前記サンプル出力は異なる

<root> 
    <firsteName>John</firsteName> 
    <lastName>Doe</lastName> 
    <birthDate>1970-01-01</birthDate> 
</root> 

を生成クエリ文字列内の「firstName」。読者のための練習として、パラメータ名のスペル修正などの改良を残します。

+0

マイケル: '$ name'と' $ val'に 'let'を使うのではなく、FLWOR式をネストする理由はありますか? ($ querystring、 '&') let $ name:= substring-before($ avs、 '=') let $ val:= substring-after($ avs 、 '=') return要素{$ name} {$ val} ' – joewiz

+0

@joewiz:可能な限りXPath内にとどまるようにしていました。要素コンストラクタ(だから、いいえ、重要でない、または面白い理由はありません) –

+0

ああ、私は見る!興味深い、ありがとう! – joewiz

関連する問題