这是我的XML文件:
<?xml version="1.0" encoding="utf-8"?>
<consentException fpmlVersion="5-6" >
<header>
<messageId messageIdScheme="www.test.com">LH_msf_id</messageId>
<inReplyTo messageIdScheme="">2424234243</inReplyTo><!-- message Id of entering party -->
<sentBy>test</sentBy>
<sendTo>SEF1</sendTo>
<creationTimestamp>2010-09-09T10:00:00-00:00</creationTimestamp>
</header>
<correlationId correlationIdScheme="">SEF_correlationId</correlationId>
<reason>
<reasonCode>3500001</reasonCode>
<description>Invalid Currency ABC</description>
</reason>
<reason>
<reasonCode>3500043</reasonCode>
<description>Organization XYZ is not defined</description>
</reason>
</consentException>
这是我的XSLT文件:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="consentException/header/sentBy">
<Hello><xsl:apply-templates select="@*|node()"/></Hello>
</xsl:template>
</xsl:stylesheet>
现在,XSLT代码替换了xml文件中的标记:( Hello标记)
<?xml version="1.0" encoding="UTF-8"?><consentException fpmlVersion="5-6">
<header>
<messageId messageIdScheme="www.test.com/">LH_msf_id</messageId>
<inReplyTo messageIdScheme="">2424234243</inReplyTo><!-- message Id of entering party -->
<Hello>Test</Hello>
<sendTo>SEF1</sendTo>
<creationTimestamp>2010-09-09T10:00:00-00:00</creationTimestamp>
</header>
<correlationId correlationIdScheme="">SEF_correlationId</correlationId>
<reason>
<reasonCode>3500001</reasonCode>
<description>Invalid Currency ABC</description>
</reason>
<reason>
<reasonCode>3500043</reasonCode>
<description>Organization XYZ is not defined</description>
</reason>
</consentException>
但是,如果我想要替换XML文件中的所有标记,而不是指定每个标记,那么有更好的方法吗?
我不确定这一点但是如果有一个包含XML标签的文件以及必须替换哪些XML标签,是否可以通过某种方式使用XSLT代码引用该文件?
我正在努力寻找完成此任务的最佳方式 注意:标记替换只能用XSLT代码完成
更新
以下是最终的XML应该是什么样的:
<?xml version="1.0" encoding="utf-8"?>
<consentException fpmlVersion="5-6" >
<header>
<FPHdMsgID FPHdMsgIDScheme="www.test.com">LH_msf_id</FPHdMsgID>
<inReplyTo messageIdScheme="">2424234243</inReplyTo><!-- message Id of entering party -->
<FPHdSentBy>Traiana</FPHdSentBy>
<FPHdSentTo>SEF1</FPHdSentTo>
<FPHdCreateTime>2010-09-09T10:00:00-00:00</FPHdCreateTime>
</header>
<FPCorID FPCorIDSch="">SEF_correlationId</FPCorID>
<reason>
<FPRsnCode>3500001</FPRsnCode>
<FPRsnDesc>Invalid Currency ABC</FPRsnDesc>
</reason>
<reason>
<FPRsnCode>3500043</FPRsnCode>
<description>Organization XYZ is not defined</description>
</reason>
</consentException>
答案 0 :(得分:0)
如果存在包含XML标记的文件以及XML标记具有的内容 要替换,可以通过某种方式引用文件 XSLT代码?
是的,但肯定不是完成此任务的最佳方式&#34;因为它会引入一个不必要的(而且相当昂贵的)步骤。如果您不得不不时更改重命名映射,并且不想在此过程中修改主XSLT文档,那么可能是一个很好的方法。否则,每个重命名最好都有一个模板。 XSLT自然是冗长的,习惯了它。
答案 1 :(得分:0)
像这样定义映射文件:
renaming.xml
<rename>
<rename old="foo" new="bar"/>
<rename old="fox" new="box"/>
</rename>
然后写一个元样式表&#39;像这样:
<xsl:namespace-alias stylesheet-prefix='a' result-prefix="xsl"/>
<xsl:template match="rename">
<a:template match="{@old}">
<a:element name="{@new}">
<a:copy-of select="@*"/>
<a:apply-templates/>
</a:element>
</a:template>
</xsl:template>
针对rename.xml运行此元样式表,并生成一个XSLT样式表,每个元素名称有一个模板规则,可以针对任何源文档运行并执行重命名。
我当然留下了一些细节,比如处理名称不在重命名文件中的元素,或处理名称空间。但任务很简单。