2017-09-07 21 views
1

1.0と2.0の両方で、XML全体をXSLTで見たいと思っています。 アイデアは私が; xml全体を検索する

<root> 
<data>test</data> 
<root2> 
    <data2>testt</data2> 
    <data3>1234</data3> 
</root2> 
</root> 

ポイントがあり、このXMLから値1234をしたい、次ので、値がXMLを提供し、誰に応じて、XML内の別の場所にすべての時間です。特定の値についてすべてのXML要素を調べることは技術的に可能ですか?

ありがとうございます!

+0

あなたの質問は不明です。変換の予想される結果は何ですか? –

+0

それで、検索の基準は何ですか、要素名 'data3'ですか? –

+0

基準は要素の値であり、値は任意の要素に含めることができるため、要素の値ではありません。期待される結果は、値を見つけることであり、その値に基づいてxslt内の特定の他のアクションを実行します。値がxmlに全く見つからない場合は、同じxmlが返されます。私は、この問題を除いて、それを持っている.. – stunnie

答えて

0

まあ、これはおそらく、非常にエレガントではありませんが、それはXPath 1.0のために動作します:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
    <xsl:template match="/" > 
     <xsl:value-of select="//*[not(*)][boolean(number(substring(text(), 3, 6)))][translate(substring(text(), 1, 2), 'ABCDEFGHIJKLMNOPQRSTUVWXYZ', 'ZZZZZZZZZZZZZZZZZZZZZZZZZZZ')='ZZ'][string-length(text())=8]/text()"/> 
    </xsl:template > 
</xsl:stylesheet> 

テストデータ:

<root> 
<data>test</data> 
<root2> 
    <data2>testt</data2> 
    <data3>XX345678</data3> 
</root2> 
</root> 

テスト出力:ここに

<?xml version="1.0" encoding="UTF-8"?>XX345678 

葉ノードのみを取り、テキストが2文字で始まり6桁で終わるかどうかをテストします。

+0

実際にエレガントではありませんが、機能します!ありがとう! – stunnie

関連する問題