2010-06-24 134 views
0


我們使用XSLT根據它們的值顯示xml屬性。我們可以使用C#從服務器端執行此操作。但是我們沒有得到如何通過XSLT實現它。
我們使用樣本xml作爲;
如何使用XSLT根據屬性值顯示屬性?

<BookInfo> 
    <BookTable show="Book 1" > 
     <book id="book1" value="Book 1" /> 
     <book id="book2" value="Book 2" /> 
    </BookTable> 
</BookInfo> 


我們要讀「秀」的屬性值,並根據價值,我們要顯示的節點信息。
請幫我使用XSLT來實現這一點。 在此先感謝。

修改過的xml;

<Book> 
    <Info> 
    <Item name="Item1" type="DropDown" defaultValue="Two" values="One,Two,Three" /> 
    <Item name="One" type="Label" value="some text" /> 
    <Item name="Two" type="TextBox" value="another text" /> 
    <Item key="Three" name="CheckBox" value="true" /> 
    </Info> 
</Book> 

不幸的是,XML格式發生了變化。現在,在這種情況下,對於Item1,defaultValue是兩個,因此應該返回名稱爲「two」的節點。

+0

你如何模型兩個或更多的項目?您在同一級別使用相同的元素名稱,但使用不同的模式! – 2010-06-24 16:25:54

+0

@Alejandro:是的,實際上這是必需的。在解析XML時,我們需要根據條件顯示節點。 – 2010-06-25 04:51:11

回答

1

它是這樣的:

<xsl:template match="BookTable"> 
    <xsl:value-of select="book[@value = current()/@show]"/> 
</xsl:template> 

編輯
你的第二個例子是不太清楚,我假設總有一個<Item name="Item1">節點,即應顯示指向真正的節點。

<xsl:template match="Info"> 
    <xsl:copy-of select="Item[@name = Item[@name='Item1']/@defaultValue]" /> 
</xsl:template> 

在XPath你需要一個@讓你輸入的XML的屬性值。
Item[@name = ...]選擇名稱屬性值等於指定值的項目。
current()允許訪問模板正在處理的當前節點。你需要一個簡單的@show爲被選節點選擇該屬性的值。例如:Item[@name = @defaultValue]將選擇'name'和'defaultValue'值相同的項目。

+0

你好漢斯, 感謝您的回覆。但不幸的是,XML格式發生了變化。 – 2010-06-24 09:32:54

+0

@Vijay,我延長了我的回答。 – 2010-06-24 10:49:32

+0

如果你可以信任這個模式,你可以說'match ='Item [@name = ../Item/@ defaultValue]「是一個通用的方法。看到我對這個問題的評論。 – 2010-06-24 16:30:22