这是我的问题。
我有一些带有调用模板的预构建XSLT,另一个文件中的模板代码 我可以编辑模板代码的内容,但不能编辑主XSLT。
School_College.xsl(我无法编辑)
<xsl:stylesheet version="1.0"
xmlns:xp20="http://www.oracle.com/XSL/Transform/java/oracle.tip.pc.services.functions.Xpath20"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:ns0="http://www.myschool.org"
xmlns:ora="http://schemas.oracle.com/xpath/extension"
xmlns:ns1="http://www.mycollege.org"
<xsl:import href="school_college_custom.xsl"></xsl:import>
<xsl:template match="/">
<ns1:College>
<ns1:Batch>
<ns1:StudentsCount>
<xsl:value-of select="/ns0:School/ns0:Class/ns0:NoOfStudents"/>
</ns1:StudentsCount>
<ns1:TeachersCount>
<xsl:value-of select="/ns0:School/ns0:Class/ns0:NoOfTeachers"/>
</ns1:TeachersCount>
<ns1:BatchStartTime>
<xsl:value-of select="/ns0:School/ns0:Class/ns0:ClassStartTime"/>
</ns1:BatchStartTime>
<xsl:call-template name="batch_ext"></xsl:call-template>
</ns1:Batch>
</ns1:College>
</xsl:template>
school_college_custom.xsl(我可以修改此内容,从上方导入和调用)
<?xml version="1.0" encoding="windows-1252" ?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:ns1="http://www.mycollege.org">
<xsl:template name="batch_ext">
<ns1:BatchEndTime>
<xsl:value-of select="'5PM'"/>
</ns1:BatchEndTime>
<ns1:BreakTime>
<xsl:value-of select="'1PM'"/>
</ns1:BreakTime>
</xsl:template>
</xsl:stylesheet>
源XML:
<?xml version="1.0" encoding="UTF-8" ?>
<School xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.myschool.org xsd/school.xsd"
xmlns="http://www.myschool.org">
<Class>
<NoOfStudents>10</NoOfStudents>
<NoOfTeachers>2</NoOfTeachers>
<ClassStartTime>9AM</ClassStartTime>
</Class>
</School>
目标XML :(当前)
<?xml version="1.0" encoding="UTF-8" ?>
<College xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.mycollege.org ../xsd/college.xsd"
xmlns="http://www.mycollege.org">
<Batch>
<StudentsCount>10</StudentsCount>
<TeachersCount>2</TeachersCount>
<BatchStartTime>9AM</BatchStartTime>
<BatchEndTime>5PM</BatchEndTime>
<BreakTime>1PM</BreakTime>
</Batch>
</College>
有没有办法将BatchStartTime更新为10AM(任何值)。但我只需要修改school_college_custom.xsl。如果在模板中添加“BatchStartTime”元素(如下所示),则会创建重复元素
我的代码:这不起作用(创建重复节点)
<?xml version="1.0" encoding="windows-1252" ?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:ns1="http://www.mycollege.org">
<xsl:template name="batch_ext">
<ns1:BatchStartTime>
<xsl:value-of select="'10AM'"/>
</ns1:BatchStartTime>
<ns1:BatchEndTime>
<xsl:value-of select="'5PM'"/>
</ns1:BatchEndTime>
<ns1:BreakTime>
<xsl:value-of select="'1PM'"/>
</ns1:BreakTime>
</xsl:template>
</xsl:stylesheet>
目标XML :(预计,我需要这样的输出)
<?xml version="1.0" encoding="UTF-8" ?>
<College xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.mycollege.org ../xsd/college.xsd"
xmlns="http://www.mycollege.org">
<Batch>
<StudentsCount>10</StudentsCount>
<TeachersCount>2</TeachersCount>
<BatchStartTime>10AM</BatchStartTime>
<BatchEndTime>5PM</BatchEndTime>
<BreakTime>1PM</BreakTime>
</Batch>
</College>
目标XML :(来自上面代码的实际输出)
<?xml version="1.0" encoding="UTF-8" ?>
<College xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.mycollege.org ../xsd/college.xsd"
xmlns="http://www.mycollege.org">
<Batch>
<StudentsCount>10</StudentsCount>
<TeachersCount>2</TeachersCount>
<BatchStartTime>9AM</BatchStartTime>
<BatchStartTime>10AM</BatchStartTime>
<BatchEndTime>5PM</BatchEndTime>
<BreakTime>1PM</BreakTime>
</Batch>
</College>
请给出一些解决方案。提前谢谢。
答案 0 :(得分:0)
不,在调用自定义模板之前,您无法修改已添加到结果树的节点。如果主(导入)XSLT使用xsl:apply-templates
而不是xsl:value-of
来获取要插入到结果中的值,那么您将能够定义
<xsl:template match="ns0:ClassStartTime">10AM</xsl:template>
覆盖此元素的默认模板,但是在写入主XSLT时,您无能为力。