2010-03-03 51 views
0

我正在使用xslt轉換xml。如何在同一級別使用for-each方法使用xslt解析兩個xml標籤?

原始XML是

<Content> 
    <book> 
    <customData> 
      <CustomDataElement> 
      <title>book-name</title> 
      <value>Java</value> 
      </CustomDataElement> 
      <CustomDataElement> 
      <title>genre</title> 
      <value>Programming</value> 
      </CustomDataElement> 
    </customData> 
    </book> 
    <authors> 
    <author> 
     <name>authorOne</name> 
     <country>US</country> 
    </author> 
    </authors> 
    <book> 
    <customData> 
      <CustomDataElement> 
      <title>book-name</title> 
      <value>Stranger</value> 
      </CustomDataElement> 
      <CustomDataElement> 
      <title>genre</title> 
      <value>Fiction</value> 
      </CustomDataElement> 
    </customData> 
    </book> 
    <authors> 
    <author> 
     <name>authorthree</name> 
     <country>UK</country> 
    </author> 
    </authors> 
</Content> 

和我的XSLT是如下

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" > 
<xsl:template match="/"> 
<xsl:for-each select="Content/book"> 
<media> 
    <book> 
<xsl:apply-templates select="customData/CustomDataElement[title = 'book-name']" /> 
    </book> 

    <genre> 
<xsl:apply-templates select="customData/CustomDataElement[title = 'genre']" /> 
    </genre> 
    <author> 
    <xsl:value-of select="../authors/author/name" /> 
    </author> 
</media> 
</xsl:for-each> 
</xsl:template> 

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

這給了我輸出

<?xml version="1.0"?> 
<media> 
    <book>Java</book> 
    <genre>Programming</genre> 
    <author>authorOne</author> 
</media> 
<media> 
    <book>Stranger</book> 
    <genre>Fiction</genre> 
    <author>authorOne</author> 
</media> 

我想從標籤的作者,作者的名字\作者「,它跟隨着書籤。

我在這裏失蹤了什麼?請幫助而不是

<xsl:value-of select="../authors/author/name" /> 

+0

是的...我使用for-each作爲「content/book」..但是在輸出中,我需要作者標籤作爲書的子標籤,而不是輸入中的情況......無論我嘗試的是給我總是第一本書的作者... – 2010-03-03 10:58:28

回答

2

嘗試

<xsl:value-of select="following-sibling::authors[1]/author/name" /> 

既然你是在一個book節點的背景下,這個XPath說要尋找第一([1])以下的兄弟authors節點,並從中選擇author/name

+0

完美...謝謝.... 只是一個更多的問題.....我在哪裏可以找到這個文件的 '以下兄弟'和其他類似的相同.... – 2010-03-03 11:13:23

+0

@Vijay它是在MSDN中,我經常提到http://msdn.microsoft.com/en-us/library/ms256086.aspx,你可以看到圍繞那篇文章的文檔樹。 – AakashM 2010-03-03 11:38:51