The entity name must immediately follow the ‘&‘ in the entity reference.

文章讲述了在XML文档中使用JavaScript代码时遇到的XML解析错误,原因是未正确转义XML特殊字符。解决方案包括转义特殊字符或使用CDATA块来包裹JavaScript代码,以避免XML解析问题。此外,建议将JS代码放在单独的文件中以优化加载和缓存。
摘要由CSDN通过智能技术生成

产生问题的点:

<?xml version='1.1' encoding='UTF-8'?>
<flow-definition plugin="workflow-job@1268.v6eb_e2ee1a_85a">
    <actions/>
    <description></description>
    <displayName>test-java-23-1</displayName>
    <keepDependencies>false</keepDependencies>
    <definition class="org.jenkinsci.plugins.workflow.cps.CpsFlowDefinition" plugin="workflow-cps@3616.vb_2e7168f4b_0c">
        <script>pipeline {
  agent {
    label 'slave'
  }
  stages {
    stage('自定义阶段') {
      steps {
        container('maven') {
          checkout([$class: 'GitSCM', branches: [[name: 'master']], extensions: [], userRemoteConfigs: [[credentialsId: 'CVk9NVQEpCBHjrt9rsS9Kg', url: 'http://git.piesat.cn:27080/guojinquan/pie-engine-nativesphere-cicd.git']]])
          sh 'mvn clean package -Psafe-test  -Dmaven.test.skip=true -Dxjar.password=io.xjar'
          sh 'docker login -u secret-harbor-10.31.4.34-1180 -p Harbor12345 10.1.32.22'
          sh '''echo \'FROM adoptopenjdk/openjdk8:latest
ENV HOME /nativesphere-server
#挂载app dir
ENV LANG C.UTF-8
ENV TZ=Asia/Shanghai
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
#COPY or ADD source to Image
ADD ./nativesphere-cicd-server/target/nativesphere-cici-server-1.0.0.xjar ${HOME}/nativesphere-cici-server-1.0.0.jar
#ADD ./nativesphere-cicd-server/target/docker-start.sh ${HOME}/docker-start.sh
WORKDIR ${HOME}
EXPOSE 8080
ENTRYPOINT ["sh","docker-start.sh"]\' > Dockerfile; sed -i \'s/\\\\n/\\n/g\' Dockerfile;'''
          sh 'docker build -t 10.1.32.22/nativesphere/test .'
          sh 'docker push 10.1.32.22/nativesphere/test'
        }

      }
    }

       </script>
        <sandbox>true</sandbox>
    </definition>
    <triggers/>
    <disabled>false</disabled>
</flow-definition>

上面是我在构建任务是生成的xml文件,以string形式传递给接口但是接口验证产生问题,问题的点是这样的,

问题原因:

Facelets 是一种基于 XML 的视图技术,它使用 XHTML+XML 生成 HTML 输出。XML 有五个特殊字符,XML 解析器对其进行特殊处理:

<标签的开始。
>标签的结尾。
"属性值的开始和结束。
'属性值的替代开始和结束。
&实体的开始(以 结尾;)。

如果&which 后面没有#(例如 ,  , 等),XML 解析器将隐式查找五个预定义实体名称 lt, gt, amp,quot和 之一apos,或任何手动定义的实体名称。但是,在您的特定情况下,您使用&的是 JavaScript 运算符,而不是 XML 实体。这完全解释了您遇到的 XML 解析错误:

实体名称必须紧跟实体引用中的“&”

解决办法:

本质上,您在错误的地方编写了 JavaScript 代码,一个 XML 文档而不是一个 JS 文件,因此您应该相应地转义所有 XML 特殊字符。必须&转义为&amp; 例如:&& 转义之后应该是:&amp;&amp;
因此,在您的特定情况下,

if (Modernizr.canvas && Modernizr.localstorage && 

必须成为

if (Modernizr.canvas &amp;&amp; Modernizr.localstorage &amp;&amp;

使其 XML 有效。

然而,这使得 JavaScript 代码更难阅读和维护。如果您想在 XML 文档中继续使用&而不是&amp;JavaScript 代码,那么您应该将 JavaScript 代码放在字符数据 (CDATA) 块中。因此,在 JSF 术语中,这将是:

<h:outputScript>
    <![CDATA[
        // ...
    ]]>
</h:outputScript>
XML 解析器会将块的内容解释为“普通”字符数据而不是 XML,因此“按原样”解释 XML 特殊字符。

但是,更好的方法是将 JS 代码放在它自己的 JS 文件中,该文件由<script src>,或者用 JSF 术语来说,<h:outputScript>.

<h:outputScript name="onload.js" target="body" />
(注意target="body"; 这样 JSF 会自动<script>在 的最后呈现 the <body>,而不管它本身位于何处,从而实现与和<h:outputScript>相同的效果;所以你不需要再在该脚本中使用它们)window.onload$(document).ready()

这样您就不必担心 JS 代码中的 XML 特殊字符。作为额外的好处,这使您有机会让浏览器缓存 JS 文件,以便总响应大小更小。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值