1
並且縮進也不起作用!XSL輸出顯示爲文本而不是顯示爲XML
我需要從小文件生成XML文件,所以我嘗試使用XSL來合併所有文件,但它不能按預期方式工作。
當觀看 「devices.xml」 當所有文件上傳到一個網站:
- 火狐 - 顯示爲文本
- 的InternetExplorer - 顯示爲文本
- 瀏覽器 - 顯示爲文本
當我使用「文件|另存爲」 -
- FireFox - 保存生成的XML - myRoot-device-input1-。 。 。
- InternetExplorer - 保存原始XML - device_list文件。 。 。
- Chrome - 保存原始XML - device_list文件。 。 。
當觀看 「devices.xml」 本地文件:
- 火狐 - 顯示爲文本
- 的InternetExplorer - 「訪問被拒絕錯誤處理資源」
- 鉻 - 顯示空白頁???
我的問題:
- 爲什麼我看到生成的XML爲文本?
- 我可以強制所有瀏覽器保存生成的XML而不是原始的XML嗎?
源文件:
devices.xml
<?xml version="1.0" ?>
<?xml-stylesheet type="text/xsl" href="./mergedocs.xsl" ?>
<device_list>
<file name="./device1.xml" />
<file name="./device2.xml" />
</device_list>
device1.xml
<d>
<i1 v="11" />
<i2 v="11" />
</d>
device2.xml
<d>
<i1 v="22" />
<i2 v="22" />
</d>
probes1.xml
<p name="probes1">
<Item>"1 Name Pb1"</Item>
<Item>"2 Name Pb1"</Item>
</p>
probes2.xml
<p name="probes2">
<Item>"1 Name Pb2"</Item>
<Item>"2 Name Pb2"</Item>
</p>
mergedocs。XSL
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:output method="xml" indent="yes" />
<xsl:variable name="probes1" select="document('probes1.xml')" />
<xsl:variable name="probes2" select="document('probes2.xml')" />
<xsl:template match="/">
<myRoot>
<xsl:for-each select="/device_list/file">
<device>
<xsl:variable name="k" select="position()" />
<xsl:apply-templates select="document(@name)/d" >
<xsl:with-param name="strK" select="$k"/>
</xsl:apply-templates>
</device>
</xsl:for-each>
</myRoot>
</xsl:template>
<xsl:template match="d">
<xsl:param name="strK" />
<xsl:apply-templates >
<xsl:with-param name="strK" select="$strK"/>
</xsl:apply-templates >
</xsl:template>
<xsl:template match="i1">
<xsl:param name="strK" />
<input1>
<name><xsl:value-of select="$probes1//Item[position() = $strK]"/></name>
<value><xsl:value-of select="@v" /></value>
</input1>
</xsl:template>
<xsl:template match="i2">
<xsl:param name="strK" />
<input2>
<name><xsl:value-of select="$probes2//Item[position() = $strK]"/></name>
<value><xsl:value-of select="@v" /></value>
</input2>
</xsl:template>
</xsl:stylesheet>
謝謝。我可以在Web上使用XML文件的本地XSLT處理器嗎?例如使用 - [msxsl.exe www.mySite.com \ devices.xml。\ mergedocs.xsl -o。\ output \ merged.xml] 與 - 相同[msxsl.exe。\ devices.xml mergedocs.xsl - o。\ output \ merged.xml] – Atara
我測試過了,它工作正常。謝謝。 – Atara
當然,一旦您在本地機器上運行XSLT,您將不再受XSLT 1.0或像MSXML3這樣的古老處理器的約束。 –