我有一个XML,我想用下面的xslt将属性值(name =“name”)更改为另一个(name =“value”):
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js" type="text/javascript"></script>
<script>
var jq191 = jQuery.noConflict(true);
</script>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js" type="text/javascript"></script>
<script>
var jq132 = jQuery.noConflict(true);
</script>
<script>
jq191(document).ready(function() {
// use the newer version to load the script
jq191.getScript( "{$baseurl}/js/jetmenu.js" )
.done(function( script, textStatus ) {
console.log( textStatus );
// locally override the $() to use the older version of jQuery
var $ = jq132;
// Use the loaded script
$.jetmenu();
})
.fail(function( jqxhr, settings, exception ) {
console.error( "Triggered ajaxError handler." );
});
// use the newer one from now on
$ = jq191;
}); // ready
</script>
XML INPUT代码段:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" encoding="UTF-8" indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
<!--xsl:template match="text()"-->
<!--xsl:text select="." disable-output-escaping="yes" /-->
<!--xsl:value-of select="." disable-output-escaping="yes" />
<xsl:copy-of select="child::*"/>
</xsl:template-->
<xsl:template match="@*|node()" mode="s">
<xsl:copy>
<xsl:apply-templates select="@*|node()" mode="s"/>
</xsl:copy>
</xsl:template>
<xsl:template match="@*|node()" mode="se">
<xsl:copy>
<xsl:apply-templates select="@*|node()" mode="se"/>
</xsl:copy>
</xsl:template>
<xsl:template match="@name" mode="se">
<xsl:attribute name="name">value</xsl:attribute>
</xsl:template>
<xsl:template match="tag5[@type='testtype']">
<xsl:copy>
<xsl:apply-templates select="@*|node()" mode="s"/>
</xsl:copy>
</xsl:template>
<xsl:template match="tag6[@name='name']" mode="s">
<xsl:copy>
<xsl:apply-templates select="@*|node()" mode="se"/>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
应用xslt后的XML OUTPUT是:
<?xml version="1.0" encoding="UTF-8"?>
<dataroot version="2.0">
<Model id="111" name="test">
<tag1 id="222" type="VERSION">
<tag2 id="333" name="Version" value="2"/>
</tag1>
<tag3 id="444">
<tag4 id="555" versionID="test/00001" name="name" definition="through test. 
" attrs="12 23"/>
<tag4 id="666" versionID="test/00001" name="name" definition="through test 2. 
" messages="34 45"/>
</tag3>
<tag5 id="777" type="testtype">
<tag6 id="888" name="name" value="667"/>
<tag6 id="999" name="context" value="FIX 5.0"/>
</tag5>
</Model>
</dataroot>
xslt基本上完成了预期的工作。但是,有意外的变换:
<?xml version="1.0" encoding="UTF-8"?>
<dataroot version="2.0">
<Model id="111" name="test">
<tag1 id="222" type="VERSION">
<tag2 id="333" name="Version" value="2"/>
</tag1>
<tag3 id="444">
<tag4 id="555" versionID="test/00001" name="name" definition="through test. " attrs="12 23"/>
<tag4 id="666" versionID="test/00001" name="name" definition="through test 2. " messages="34 45"/>
</tag3>
<tag5 id="777" type="testtype">
<tag6 id="888" name="value" value="667"/>
<tag6 id="999" name="context" value="FIX 5.0"/>
</tag5>
</Model>
</dataroot>
我想保留原始实体。 我已经尝试过disable-output-escape(请参阅xslt中带注释文本到@definition的注释部分),不起作用。有什么建议吗?
我使用xsltproc btw。
提前致谢!
答案 0 :(得分:0)
似乎xslt无法处理这个要求,所以我在perl中做到了。 谢谢大家!