如何使用XSLT根据属性值显示属性?

时间:2010-06-24 06:52:53

标签: asp.net xml xslt


我们正在使用XSLT根据其值显示xml属性。我们可以使用C#从服务器端执行此操作。但我们没有得到如何通过XSLT实现它。
我们使用样本xml作为;

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


我们想要读取“show”属性值,并根据值,我们想要显示节点信息。
请帮我用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为2,因此应该返回名为“two”的节点。

1 个答案:

答案 0 :(得分: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中,您需要@来获取input-xml属性的值。
Item[@name = ...]选择name属性值等于指定值的项目 current()可以访问模板正在处理的当前节点。您需要它,因为普通@show将为所选节点选择该属性的值。示例:Item[@name = @defaultValue]会选择“name”和“defaultValue”的值相同的项目。