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

产生问题的点:


<flow-definition plugin="[email protected]_e2ee1a_85a">
    <actions/>
    <description>description>
    <displayName>test-java-23-1displayName>
    <keepDependencies>falsekeepDependencies>
    <definition class="org.jenkinsci.plugins.workflow.cps.CpsFlowDefinition" plugin="[email protected]_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>truesandbox>
    definition>
    <triggers/>
    <disabled>falsedisabled>
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 特殊字符。必须&转义为& 例如:&& 转义之后应该是:&&
因此,在您的特定情况下,

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

必须成为

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

使其 XML 有效。

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

<h:outputScript>
    
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 文件,以便总响应大小更小。

你可能感兴趣的:(Jenkins,java,xml)