2017-02-22 73 views
0

非常感謝您的即時響應。你發送的代碼對我來說工作得很好,但是當我們有下面的代碼時,它會引發錯誤。當這行被刪除時,它工作正常。
對於此行<xsl:strip-space elements="*" />我提示以下錯誤:XSLT:<xsl:strip-space>錯誤並省略了XML輸出中的某些元素

空格不能從已經被加載輸入文檔剝離。
改爲提供輸入文檔作爲XmlReader

此外,我還有一個疑問:如果我們想要有一些子節點而不是所有的子節點選擇,該怎麼辦。

例如:

<root type="object"> 
    <items type="array"> 
     <item type="object"> 
      <elem1></elem1> 
      <elem2></elem2> 
      <elem3></elem3> 
      <elem4></elem4> 
      <elem5></elem5> 
      <elem6></elem6> 
      <elem7></elem7> 
     </item> 
    </items> 
</root> 

應該被變換爲:

<assets> 
    <item> 
     <elem1></elem1> 
     <elem3></elem3> 
     <elem6></elem6> 
     <elem7></elem7> 
    </item> 
</assets> 
+2

問題確實應該是自包含的,所以你應該修改你的問題,包括您在使用(尤其是因爲你還沒有提供故障代碼一個鏈接到你以前的問題)。不過,對於這個特殊情況,如果你顯示正在執行轉換的C#/ VB.Net(?)代碼,它可能會有所幫助。謝謝。 –

+0

你指的是哪個代碼?什麼是XSLT代碼? – Roland

+0

我改進了問題的格式,拼寫和清晰度。我還更改了標題以更恰當地匹配問題的內容。 – zx485

回答

0

嘗試此XSLT-1.0。它複製所有想要的elemX元素與X€[1,3,6,7]並刪除所有其他elemY元素。
所有空格被刪除<xsl:strip-space>

<?xml version="1.0" encoding="UTF-8" ?> 
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
<xsl:strip-space elements="*" /> 

    <xsl:template match="/"> 
     <assets> 
     <item> 
      <xsl:apply-templates select="@*|node()" /> 
     </item> 
     </assets> 
    </xsl:template> 

    <xsl:template match="elem1|elem3|elem6|elem7" priority="1"> 
     <xsl:copy-of select="." /> 
    </xsl:template> 

    <xsl:template match="*[starts-with(local-name(.),'elem')]" /> 

</xsl:stylesheet> 

輸出是:在StackOverflow上

<?xml version="1.0"?> 
<assets> 
    <item> 
     <elem1/> 
     <elem3/> 
     <elem6/> 
     <elem7/> 
    </item> 
</assets>