嗨,我正在尝试使用 xsl 将一个 XML 转换为另一个 XML。XSL 转换在 Oxygen 开发人员和 VM 中进行测试时工作正常。
但是我仍然在第 20 行和第 23 行收到类似"用于属性名称的非法值"之类的警告。
我使用的XSL是:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:cl="http://tyryt.com/abc/abc_order"
xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:java="http://xml.apache.org/xslt/java"
exclude-result-prefixes="cl xsd java" version="1.0">
<xsl:output indent="yes" method="xml" encoding="UTF-8" omit-xml-declaration="no"/>
<xsl:template name="generateInsightsHeader">
<xsl:for-each select="/">
<xsl:element name="pon">
<xsl:value-of select="*/cl:HDR/cl:PON"/>
</xsl:element>
<xsl:element name="version">
<xsl:value-of select="*/cl:HDR/cl:VER"/>
</xsl:element>
</xsl:for-each>
</xsl:template>
<xsl:template name="copyWholeXml" match="*">
<xsl:if test="local-name() != 'brmserrorxml'">
<xsl:element name="{local-name()}">
<xsl:for-each select="@*">
<xsl:if test="../@protocoltype != ''">
<xsl:attribute name="{local-name()}">
<xsl:value-of select="."/>
</xsl:attribute>
</xsl:if>
</xsl:for-each>
<xsl:apply-templates/>
</xsl:element>
</xsl:if>
</xsl:template>
<xsl:template match="/">
<IntermediateXml xmlns:json="http://json.org/">
<xsl:choose>
<xsl:when test="cl:SAMPLE_ORDER">
<xsl:call-template name="generateInsightsHeader"/>
<xsl:call-template name="copyWholeXml"/>
</xsl:when>
</xsl:choose>
</IntermediateXml>
</xsl:template>
</xsl:stylesheet>
我使用的示例 XML 是:
<?xml version="1.0"?>
<SAMPLE_ORDER class="1" index="0" xmlns="http://tyryt.com/abc/abc_order" service="SAMPLE_ORDER">
<header>
<interfaceid>INTERFACE_REQUIRED</interfaceid>
<actionrequired>Transmit</actionrequired>
</header>
<HDR>
<MESSAGE_ID>229364ASE</MESSAGE_ID>
<DATE>2017-09-04T12:29:11+05:30</DATE>
<PON>229364ASE10</PON>
<VER>01</VER>
</HDR>
<LOCAL_MESSAGE>
<LOCAL_ADMIN>
<LOCQTY>111</LOCQTY>
<AN>JHGKJ679868</AN>
<CC>005F</CC>
<AUTHORIZATION>
<DDD>20171228</DDD>
<ACTL>01234567899</ACTL>
</AUTHORIZATION>
</LOCAL_ADMIN>
<LSR_BILL>
<ACNA>WEE</ACNA>
</LSR_BILL>
<CONTACT>
<INIT>ASDDFAD</INIT>
<INIT_TEL_NO>2543654576</INIT_TEL_NO>
<INIT_EMAIL>abc@gmail.com</INIT_EMAIL>
</CONTACT>
</LOCAL_MESSAGE>
<LS>
<LS_SVC_DET>
<SVC_DET_GRP>
<LOCNUM>145</LOCNUM>
<LNUM>78945</LNUM>
<LNA>D</LNA>
<ECCKT>98698KJGKUJGUKJH</ECCKT>
</SVC_DET_GRP>
</LS_SVC_DET>
</LS>
</SAMPLE_ORDER>
对于转型,我正在使用Xalan罐。
请帮我解决这个问题。 提前致谢
根节点没有名称,或者更准确地说,文档根节点的名称是空字符串 ''。因此,当您调用模板"copyWholeXml"并且当前上下文节点是根节点时,local-name()
计算结果为 '',并且<xsl:element name="{local-name()}">
无效,因为您无法生成以空字符串作为名称的新 XML 元素。 当您调用模板"copyWholeXml"时,请确保输入的命名模板不是将文档根目录作为上下文节点