2012-08-08 37 views
1

這應該是簡單的,一切我讀到說,選擇=「名稱」應該在XML文檔中選擇所有與「名」的節點.. 因此,進出口嘗試一個簡單的例子..這裏是XML:(它是一個簡單的庫存應用程序)。新建XSLT/XPath和進出口試圖讓過去的障礙

<?xml version="1.0"?> 
<inventory type="inventory"> 
<item type="zone" CanAdd="true"> 
    <title>Building</title> 
    <item type="porch" CanAdd="true"> 
     <title>Porch</title> 
    </item> 
    <item type="receptionRoom" CanAdd="true"> 
     <title>Reception Room</title> 
     <item type="doorInfo" CanAdd="true"> 
      <title>Door</title> 
      <item type="doorStyleType" select="multi"> 
       <title>Door Style</title> 
       <item> 
        <title>Internal</title> 
       </item> 
       <item> 
        <title>Plain</title> 
       </item> 
      </item> 
      <item type="doorWinMaterialType" select="single"> 
       <title>Door Material</title> 
       <item type="softwoodColours" select="single"> 
        <title>Softwood - Stained</title> 
        <item> 
         <title>Stained Pine</title> 
        </item> 
       </item> 
      </item> 
      <item type="doorwinFurnitureType" select="multi"> 
       <title>Door Furniture</title> 
       <item> 
        <title>Door Handle</title> 
       </item> 
       <item> 
        <title>LetterBox Opening</title> 
       </item> 
      </item> 
     </item> 
    </item> 
</item> 
<propertyName><![CDATA[2 Street, Village]]></propertyName> 
<propertyRef><![CDATA[15p9]]></propertyRef> 
</inventory> 

..我需要開始使用XSLT處理它。 (在頁面後面的C#代碼 - 位工作和投擲結果爲彈出)

我擺弄的XSLT是:

<?xml version="1.0" encoding="utf-8"?> 
<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" 
xmlns:xs="http://www.w3.org/2001/XMLSchema" 
      > 
<xsl:output method="xml" indent="yes"/> 
<xsl:template match="/"> 
    <div> 
      <h2>My Inventory</h2> 
      <table border="1"> 
       <tr> 
        <td> 
        <xsl:value-of select="inventory/propertyName" /> 
        </td> 
       </tr> 
      <xsl:for-each select ="item"> 
       <tr> 
        <td> 
         <xsl:value-of select="."/> 
        </td> 
       </tr> 
      </xsl:for-each> 
      </table> 
     <p>Hello world</p> 
    </div> 
</xsl:template> 
</xsl:stylsheet> 

的「項目」節點中未找到爲每個循環,我想我已經打了一個心理障礙,爲什麼。我敢肯定,當你知道這個答案時,答案非常簡單,但目前我不需要解決這個問題,然後我可以繼續這麼說。 輸出是:(在瀏覽器中)..

My Inventory 
2 Street, Village 
(I expect a list of the "item" node values here in table rows..) 
Hello world 

非常感謝, 佈雷特

回答

0

中的XPath,你已經爲你的<xsl:for-each>循環指定item相對於當前節點進行評估,即相到文檔根目錄。爲了選擇在文檔中的任何嵌套深度任何<item>元素,你將不得不使用

//item 

不過,我覺得你想要的東西稍有不同,因爲<item>元素的文本本身是他們<title>文本以及作爲任何嵌套的<item>元素的文本。也許,你正在尋找:

//item/title 

要直接對你的判決作出迴應

一切我讀到說,選擇=「名稱」應該在XML文檔中選擇所有與「名」的節點

這是不正確的。 select="name"選擇當前節點的子節點列表中名爲「name」的所有元素,而不是Xml文檔中的任何位置。

+0

輝煌,謝謝你..是的,我知道我需要進一步進入樹和「標題」元素。我用這個打了一個街區,而你的幫助真的很感謝。 – 2012-08-08 13:12:31

+0

..如果你知道任何好的'入門'指南鏈接,也將不勝感激。我已經完成了w3schools的介紹,但它們分佈在不同的技術之間。再次感謝 – 2012-08-08 13:14:54

+0

@ user1584725,避免W3Schools的 - 看到爲什麼在這裏:http://www.w3fools.com。對於鏈接* *好資源,請參閱:http://stackoverflow.com/questions/339930/any-good-xslt-tutorial-book-blog-site-online/341589#341589 – 2012-08-08 13:21:02