2011-10-22 23 views
0

xsltテンプレートを使用してxmlデータを変換する際に問題があります。私はネームスペースxmlns="http://schemas.microsoft.com/sharepoint/soap/を削除した後、問題はxmlのネームスペースについてだと思いますが、すべて正常に動作しています。XSLTによるXMLトランスフォーム、ネームスペースの問題

<?xml version="1.0"?> 
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> 
    <soap:Body> 
     <GetListCollectionResponse xmlns="http://schemas.microsoft.com/sharepoint/soap/"> 
      <GetListCollectionResult> 
       <Lists> 
        <List Title="Announcement1" Description="Announcement 1"/> 
        <List Title="Announcement2" Description="Announcement 2"/> 
       </Lists> 
      </GetListCollectionResult> 
     </GetListCollectionResponse> 
    </soap:Body> 
</soap:Envelope> 

<xsl:stylesheet version="1.0" 
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
    xmlns:msxsl="urn:schemas-microsoft-com:xslt" 
    exclude-result-prefixes="msxsl"> 

    <xsl:template match="//Lists"> 
    <table> 
     <xsl:for-each select="List"> 
     <tr> 
      <td> 
      <xsl:value-of select="@Title"/>: 
      </td> 
      <td> 
      <xsl:value-of select="@Description"/> 
      </td> 
     </tr> 
     </xsl:for-each> 
    </table> 
    </xsl:template> 
</xsl:stylesheet> 

答えて

2

ちょうどあなたのスタイルシートに名前空間を追加し、それが正常に動作します。スタイルシートには、msという名前空間が使用されています。あなたは、あなたがが好きな接頭辞を使用することができます

<xsl:stylesheet version="1.0" 
    xmlns:ms="http://schemas.microsoft.com/sharepoint/soap/" 
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
    xmlns:msxsl="urn:schemas-microsoft-com:xslt" 
    exclude-result-prefixes="msxsl ms"> 

    <xsl:template match="//ms:Lists"> 
    <table> 
     <xsl:for-each select="ms:List"> 
     <tr> 
      <td> 
      <xsl:value-of select="@Title"/>: 
      </td> 
      <td> 
      <xsl:value-of select="@Description"/> 
      </td> 
     </tr> 
     </xsl:for-each> 
    </table> 
    </xsl:template> 
</xsl:stylesheet> 

これは次の出力を生成します。

また
<table><tr><td>Announcement1: 
    </td><td>Announcement 1</td></tr><tr><td>Announcement2: 
    </td><td>Announcement 2</td></tr></table> 

、XSLT 2.0で、あなただけの接頭辞にアスタリスク(*)を使用して追加することはできません。名前空間はすべて:

<xsl:stylesheet version="1.0" 
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
    xmlns:msxsl="urn:schemas-microsoft-com:xslt" 
    exclude-result-prefixes="msxsl"> 

    <xsl:template match="//*:Lists"> 
    <table> 
     <xsl:for-each select="*:List"> 
     <tr> 
      <td> 
      <xsl:value-of select="@Title"/>: 
      </td> 
      <td> 
      <xsl:value-of select="@Description"/> 
      </td> 
     </tr> 
     </xsl:for-each> 
    </table> 
    </xsl:template> 
</xsl:stylesheet> 

これは、前の例と同じ出力を生成します。

+0

xmlns:ms = "http://schemas.microsoft.com/sharepoint/soap/"これは役に立ちます。ありがとうございます。 –

+1

@ Shawn.X:それが助けになると、答えを受け入れる必要があります。これは私たちが「ありがとう」と言うことです。 –

+0

@ Shawn.Xは大歓迎です。 Dimitreが指摘したように、私の答えは受け入れてください。ありがとう! –

関連する問題