【问题标题】:Illegal value used for attribute name during xslt Transformation in javajava中的xslt转换期间属性名称使用了非法值
【发布时间】:2018-11-15 00:43:39
【问题描述】:

您好,我正在尝试使用 xsl 将 XML 转换为另一个 XML。在 Oxygen 开发人员和 VM 中测试时,XSL 转换工作正常。

但我仍然在第 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 jar。

请帮我解决这个问题。 提前致谢

【问题讨论】:

  • 那么 20 和 23 是哪几行?除完整代码外,请单独显示。
  • 请添加您的预期输出。
  • @Joel M. Lamsen 预期输出如下............ json.org/"><pon>229364ASE10</…> INTERFACE_REQUIRED .... .. 229364ASE2017-09-04T12:29:11+05:30229364ASE1001 111 ..... ......
  • 请编辑您的问题并将您想要的输出放在那里。

标签: java xml xslt xslt-1.0 xalan


【解决方案1】:

根节点没有名字,或者更准确地说,文档根节点的名字是空字符串''。因此,当您调用模板“copyWholeXml”并且当前上下文节点是根节点时,local-name() 的计算结果为 '',&lt;xsl:element name="{local-name()}"&gt; 无效,因为您无法生成以空字符串作为名称的新 XML 元素。 当您调用模板“copyWholeXml”时,请确保您没有输入以文档根作为上下文节点的命名模板

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-12-21
    • 1970-01-01
    • 1970-01-01
    • 2019-11-26
    • 2020-03-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多