我知道有很多关于使用XML
XSL
格式化stylesheet
文件的问题。但是,我不是要格式化输出,而是文件内容本身。我的意思是我目前有一个XML
文件(它是一个SolidWorks
素材库),你不能自动按字母顺序排列XML
文件的输出,我实际上必须按字母顺序排列XML
文件的内容。
有办法做到这一点吗?请看下面的我的意思快照。
谢谢!我应该注意到,我在XML
或XSL
中基本没有经验,但是做了相当多的代码,请耐心等待。
以下是我所拥有的简化版本:
<mstns:materials xmlns:mstns="http://www.solidworks.com/sldmaterials" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata" xmlns:sldcolorswatch="http://www.solidworks.com/sldcolorswatch" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="2008.03">
<classification name="Aluminum Alloy">
<classification name="Steel">
<classification name="Copper">
<classification name="Rubber">
</mstns:materials>
这就是我要将其转换为:
<mstns:materials xmlns:mstns="http://www.solidworks.com/sldmaterials" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata" xmlns:sldcolorswatch="http://www.solidworks.com/sldcolorswatch" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="2008.03">
<classification name="Aluminum Alloy">
<classification name="Copper">
<classification name="Rubber">
<classification name="Steel">
</mstns:materials>
(即按字母顺序排列分类部分)。
现在我很确定我需要使用XLST
但是我不确定我的代码或者真的如何实现它以输出新的XML
文件或在Web浏览器中或者其他的东西。这是我到目前为止所做的事情(我从this post获取了相当多的一行:
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet
version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<!-- the identity template copies everything verbatim -->
<xsl:template match="node()|@*">
<xsl:copy>
<xsl:apply-templates select="node()|@*" />
</xsl:copy>
</xsl:template>
<!-- special template for <Group> that sorts its children -->
<xsl:template match="mstns:materials">
<xsl:copy>
<xsl:copy-of select="@*" /> <!-- copy attributes, if any -->
<xsl:apply-templates select="classification">
<xsl:sort select="@name" order="ascending"/>
</xsl:apply-templates>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>