簡體   English   中英

C#xsl轉換與WinRT上的導入

[英]C# xsl transform with imports on WinRT

我有很多xsl轉換文件,這些文件使用如下所示的導入鏈接:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
   <xsl:import href="another_file.xsl"/>
   <xsl:param name="staticBaseURI" select="''"/>
   <xsl:param name="EDocsReferencedJavascript" select="0"/>
   <xsl:param name="EDocsMode" select="1"/>
</xsl:stylesheet>

在標准.NET Framework中,您具有XslTransform / XslCompiledTransform類,該類可以采用文件路徑,它可以處理那些導入(因為它知道路徑以及在何處可以找到其他文件)並進行適當的轉換。 但是在Windows通用應用程序(WinRT)中,該類不可用,我發現的唯一一個是XsltProcessor,它采用純字符串(不是文件路徑)並且不能處理導入。

如何在通用應用中進行此類轉換? 有沒有辦法使用內置的WinRT類或免費,可靠的庫來做到這一點?

謝謝。

我發現的唯一一個是XsltProcessor,它采用純字符串(不是文件路徑)

您找到的XsltProcessor類適用於Windows通用應用程序中的XsltTransform

但這並不需要您所知道的簡單字符串。 XsltProcessor類的構造函數接受XmlDocument作為參數。 對於XmlDocument對象,您可以從文件 加載,從字符串 加載從buffer加載 因此,您可以將文件加載到XmlDocument實例。 我們需要注意的是Windows Store應用程序是沙盒結構,而不是您可以訪問的設備上的所有文件。 更多詳細信息,請參考文件訪問權限

它不能處理進口

XsltProcessor可以通過從文件加載的XmlDocument對象處理<import>節點。 但是我們需要將XmlLoadSettings.ResolveExternals屬性設置為true,以便在解析文檔時可以解析外部實體引用。

和示例代碼如下:

 private async void btnxlsttest_Click(object sender, RoutedEventArgs e)
 {
     StorageFile xlstfile =await StorageFile.GetFileFromApplicationUriAsync(new Uri("ms-appx:///Assets/ForImports.xslt"));           
     XmlLoadSettings importsetting = new XmlLoadSettings();
     importsetting.ResolveExternals = true;            
     xsltDoc = await XmlDocument.LoadFromFileAsync(xlstfile,importsetting);
     StorageFile xmlfile = await StorageFile.GetFileFromApplicationUriAsync(new Uri("ms-appx:///Assets/books.xml"));         
     doc = await XmlDocument.LoadFromFileAsync(xmlfile);
     var xsltProcessor = new Windows.Data.Xml.Xsl.XsltProcessor(xsltDoc);
     String transformedStr = xsltProcessor.TransformToString(doc);
     txtshow.Text = transformedStr;        
 }

我只是將所有測試文件放在Assets文件夾中,並且文件ForImports.xslt包含如下所示的import節點。 這個示例可以從another_file.xslt加載模板。

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
 xmlns:msxsl="urn:schemas-microsoft-com:xslt" exclude-result-prefixes="msxsl"
>
<xsl:import href="another_file.xslt"/>
 <xsl:template match="/">
   <xsl:apply-imports/>
  </xsl:template>
</xsl:stylesheet>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM