2011-08-23 14 views
5

私はどのように私は実際にこのラインからいくつかのデータを入手できます。このXSLのXSL名前空間の問題

<?xml version="1.0" encoding="utf-8"?> 
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"> 
    <xsl:output method="html"/> 
    <xsl:output omit-xml-declaration="yes" encoding="UTF-8"/> 

    <xsl:template match='/'> 
     <xsl:value-of select="//Description" /> 
    </xsl:template> 
</xsl:stylesheet> 

そして、このXML

<ArrayOfLookupValue xmlns="http://switchwise.com.au/" xmlns:i="http://www.w3.org/2001/XMLSchema-instance"> 
    <LookupValue> 
    <Description>AGL</Description> 
    <Value>8</Value> 
    </LookupValue> 
    <LookupValue> 
    <Description>Australian Power &amp; Gas</Description> 
    <Value>6</Value> 
    </LookupValue> 
    <LookupValue> 
    <Description>EnergyAustralia</Description> 
    <Value>13</Value> 
    </LookupValue> 
    <LookupValue> 
    <Description>Origin Energy</Description> 
    <Value>9</Value> 
    </LookupValue> 
    <LookupValue> 
    <Description>TRU Energy</Description> 
    <Value>7</Value> 
    </LookupValue> 
</ArrayOfLookupValue> 

を持っている場合:私は時間を費やしている

<xsl:value-of select="//Description" /> 

これについては、xmlns = namespaceが私の悲しみを引き起こしているとの結論に至りました。

大変助かりました。

はBTW XMLはので、私はそれを「変更」することはできませんWebサービスから来ている - 私はそれを前処理することができますが、それは理想的ではありません...

また

私がいることを確認しているから名前空間を削除しますXMLのモックが問題を解決します。

+0

良い質問+1。解説と簡単で簡単な解答を見てください。 –

+0

名前空間が違いを生み出していることは間違いありません。 Dimitreの説明を参照してください。XMLネームスペース(特にXPathで使用されているもの)を読み上げると、将来の時間を節約できます。 – LarsH

答えて

12

XPathとXSLTの両方で最もよくある質問です。

短い答えはです。短い答えは、XPathでは、名前のない名前が「名前空間なし」に属すると見なされます。ただし、既定の名前空間を持つ文書では、接頭辞のない名前は既定の名前空間に属します。

ないDescription(または任意の他がないのでしたがって、そのような文書の表現

//Description 

は何もを(選択しない)、「いいえ名前空間」に属する文書における要素 - すべての要素名前はデフォルトの名前空間に属します)。

ソリューション

は、XML文書のデフォルト名前空間として同じnamespace-uri()を持っているあなたのXSLT名前空間を定義します。 XPath式で使用される任意の名前のためにそのように定義された名前空間の接頭辞を使用します。

<ArrayOfLookupValue xmlns="http://switchwise.com.au/" xmlns:i="http://www.w3.org/2001/XMLSchema-instance"> 
    <LookupValue> 
    <Description>AGL</Description> 
    <Value>8</Value> 
    </LookupValue> 
    <LookupValue> 
    <Description>Australian Power &amp; Gas</Description> 
    <Value>6</Value> 
    </LookupValue> 
    <LookupValue> 
    <Description>EnergyAustralia</Description> 
    <Value>13</Value> 
    </LookupValue> 
    <LookupValue> 
    <Description>Origin Energy</Description> 
    <Value>9</Value> 
    </LookupValue> 
    <LookupValue> 
    <Description>TRU Energy</Description> 
    <Value>7</Value> 
    </LookupValue> 
</ArrayOfLookupValue> 

指名手配、正しい:この変換が提供されるXML文書に適用される

<xsl:stylesheet version="1.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
xmlns:x="http://switchwise.com.au/"> 
    <xsl:output method="html"/> 
    <xsl:output omit-xml-declaration="yes" encoding="UTF-8"/> 

    <xsl:template match='/'> 
     <xsl:copy-of select="//x:Description" /> 
    </xsl:template> 
</xsl:stylesheet> 

結果が生成されます

<Description xmlns="http://switchwise.com.au/" 
xmlns:i="http://www.w3.org/2001/XMLSchema-instance" 
>AGL</Description> 
<Description xmlns="http://switchwise.com.au/" 
xmlns:i="http://www.w3.org/2001/XMLSchema-instance" 
>Australian Power &amp; Gas</Description> 
<Description xmlns="http://switchwise.com.au/" 
xmlns:i="http://www.w3.org/2001/XMLSchema-instance" 
>EnergyAustralia</Description> 
<Description xmlns="http://switchwise.com.au/" 
xmlns:i="http://www.w3.org/2001/XMLSchema-instance" 
>Origin Energy</Description> 
<Description xmlns="http://switchwise.com.au/" 
xmlns:i="http://www.w3.org/2001/XMLSchema-instance" 
>TRU Energy</Description> 
+0

+1良い答え。あなたはどのようにして質問をFAQとしてマークしていますか? – LarsH

+0

@LarsH:質問をFAQとしてマークする方法はないと思います.-現時点では、FAQは実際に「Most Viewed」であるビューの数によって決まります。そして、私たちが必要とするものは、FAQバットFATではありません - 頻繁に尋ねられるトピック:) –

+0

LOL - どのように簡単にそれを知っているとき!このようなシンプルで分かりやすい回答をいただきありがとうございます。これらの変更を私のXSLに入れておきたいと思っています。再度、感謝します!! – Rob

関連する問題