2010-10-05 123 views
1

請我想知道是否有人可以請求幫助,因爲它相當緊迫。我需要將xml文件的結構轉換爲另一個xml結構,以便將其綁定到asp.net treeview控件(我是c#開發人員)。我注意到asp.net TreeView控件接受轉換文件或XPath表達式,如果一個解決方案,將工作請一些人知道我想知道: 從修改XML結構以使用XSD或XSLT創建嵌套樹XML結構

<Skeleton> 
<Category>Carto</Category> 
<SubCategoryName>ET-ET-RS23</SubCategoryName> 
<Filename>V-01.XML</Filename> 
<XmlDefinition>SKELETON</XmlDefinition> 
</Skeleton> 

<Skeleton> 
<Category>Carto 
    <SubCategoryName>ET-ET-RS23 
    <Filename>V-01.XML 
    <XmlDefinition>&lt;SKELETON /&gt;</XmlDefinition> 
    </Filename> 
    </SubCategoryName> 
</Category> 
</Skeleton> 

基本上我想有一個嵌套的樹結構,我可以簡單地綁定到我的樹視圖控件。因此,類別包含SubCategoryName以及包含文件名和包含xmldefinition

抱歉,我希望這是有道理的,謝謝

+0

好問題(1)。查看我的答案,獲取完整而簡短的解決方案。 – 2010-10-05 18:29:26

+0

Ew,混合內容。 (文本作爲元素的兄弟。) – LarsH 2010-10-05 19:04:02

回答

2

這個樣式表:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
    <xsl:template match="node()"> 
     <xsl:copy> 
      <xsl:apply-templates select="node()[1]| 
             following-sibling::node()[1]"/> 
     </xsl:copy> 
    </xsl:template> 
    <xsl:template match="XmlDefinition/text()"> 
     <xsl:value-of select="concat('&lt;',.,'/&gt;')"/> 
    </xsl:template> 
</xsl:stylesheet> 

輸出:

<Skeleton> 
    <Category>Carto 
     <SubCategoryName>ET-ET-RS23 
      <Filename>V-01.XML 
       <XmlDefinition>&lt;SKELETON/&gt;</XmlDefinition> 
      </Filename> 
     </SubCategoryName> 
    </Category> 
</Skeleton> 
+0

+1給你和@Dimitre用於如此緊密匹配彼此的解決方案。英雄所見略同。 ;-) – LarsH 2010-10-05 19:06:37

+0

@LarsH,@Alejandro:如果兩個不同的頭腦(亞歷杭德羅和我的大多數人肯定都會)達到幾乎相同的解決方案,這就是事實。 Jae! – 2010-10-05 19:28:42

+0

Ja!我非常感謝你的評論,但我不認爲自己是一個偉大的思想。 ;) – 2010-10-05 20:02:10

1

這轉化:

<xsl:stylesheet version="1.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
<xsl:output omit-xml-declaration="yes" indent="yes"/> 

<xsl:template match="node()"> 
    <xsl:copy> 
    <xsl:apply-templates select="node()[1]"/> 
    <xsl:apply-templates select="following-sibling::node()[1]"/> 
    </xsl:copy> 
</xsl:template> 

<xsl:template match="XmlDefinition/text()"> 
    &lt;<xsl:value-of select="."/>/&gt; 
</xsl:template> 
</xsl:stylesheet> 

當所提供的XML文檔施加:

<Skeleton> 
<Category>Carto</Category> 
<SubCategoryName>ET-ET-RS23</SubCategoryName> 
<Filename>V-01.XML</Filename> 
<XmlDefinition>SKELETON</XmlDefinition> 
</Skeleton> 

產生想要的結果

<Skeleton> 
    <Category>Carto 
     <SubCategoryName>ET-ET-RS23 
      <Filename>V-01.XML 
       <XmlDefinition> 
    &lt;SKELETON/&gt; 
       </XmlDefinition> 
      </Filename> 
     </SubCategoryName> 
    </Category> 
</Skeleton> 
+0

你好,我試過這個,但我得到CartoET-ET-R23V-01.XML ... – 2010-10-05 19:29:04

+0

我希望能得到你在結果中描述的實際xml結構..am我做錯了什麼? – 2010-10-05 19:29:52

+0

@ michael-bullock:如果你有'',或者你發出的結果是<?xsl:value-of>,你會得到這樣的結果。結果,你應該把結果當作標記 – 2010-10-05 19:32:32